UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#211839#3807. 随机游走drdilyor1001326ms102756kbC++111.4kb2024-10-07 14:56:012024-10-29 10:32:12

answer

#include<bits/stdc++.h>
#define int long long
using namespace std;
void ts(){cout<<"IAKIOI\n";}
inline int read(){
	int n=0,f=1,ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		n=n*10+ch-'0';
		ch=getchar();
	}
	return n*f;
}
int n;
int fa[500005],v[500005];
vector<pair<int,int>> e[500005];
int w[500005];
int cs[500005],tw[500005];
int res;
void dfs_init(int x){
	tw[x]=w[x];
	for(int i=0;i<(int)e[x].size();i++){
		int v=e[x][i].first,w=e[x][i].second;
		cs[x]+=w;
		dfs_init(v);
		cs[x]+=cs[v];
		tw[x]+=tw[v];
	}
}
bool cmp(pair<int,int> p,pair<int,int> q){
	int v1=p.first,v2=q.first,w1=p.second,w2=q.second;
	return (cs[v1]+w1)*tw[v2]<(cs[v2]+w2)*tw[v1];
}
void dfs(int x,int c){
	//cout<<"trav "<<x<<" "<<c<<"\n";
	res+=w[x]*c;
	if(e[x].empty())return;
	vector<pair<int,int>> son;
	for(int i=0;i<(int)e[x].size();i++){
		son.push_back(e[x][i]);
	}
	sort(son.begin(),son.end(),cmp);
	for(int i=0;i<(int)son.size();i++){
		int v=son[i].first,w=son[i].second;
		dfs(v,c+w);
		c+=cs[v]+w;
	}
	//走 v1 v2.
	//cs/tw 的值最大.
	//+(c+w1)*(tw[v1])+(c+cs[v1]+w1+w2)*tw[v2]
	//+(c+w2)*tw[v2]+(c+cs[v2]+w2+w1)*tw[v1]
}
signed main(){
	n=read();
	for(int i=2;i<=n;i++)fa[i]=read(),v[i]=read(),e[fa[i]].push_back(make_pair(i,v[i]));
	for(int i=1;i<=n;i++)w[i]=read();
	dfs_init(1);
	dfs(1,0);
	cout<<res<<"\n";
	return 0;
}
//look at my code
//my code is amazing

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 3ms
memory: 12936kb

input:

11
1 653
2 978
3 277
4 562
3 119
6 957
3 362
6 637
6 157
9 939
460 270 127 466 193 710 45 318 281 74...

output:

11506132

result:

ok single line: '11506132'

Test #2:

score: 10
Accepted
time: 22ms
memory: 17984kb

input:

50000
1 983
1 937
2 776
4 753
2 494
2 683
2 335
4 316
7 274
6 638
11 535
10 872
13 808
13 817
11 94
...

output:

276117269146880

result:

ok single line: '276117269146880'

Test #3:

score: 10
Accepted
time: 0ms
memory: 13012kb

input:

1000
1 729
1 239
1 433
1 445
1 877
1 648
1 284
1 814
1 287
1 941
1 183
1 126
1 65
1 500
1 823
1 725
...

output:

94592611925

result:

ok single line: '94592611925'

Test #4:

score: 10
Accepted
time: 3ms
memory: 13016kb

input:

1000
1 790
1 229
1 462
1 658
1 880
1 507
1 109
1 66
1 356
1 477
1 963
1 689
1 284
1 962
1 896
1 671
...

output:

91654782236

result:

ok single line: '91654782236'

Test #5:

score: 10
Accepted
time: 113ms
memory: 102756kb

input:

500000
1 87
2 160
3 87
4 518
5 214
6 654
7 329
8 614
9 590
10 13
11 546
12 35
13 417
14 304
15 884
1...

output:

31331837945244749

result:

ok single line: '31331837945244749'

Test #6:

score: 10
Accepted
time: 147ms
memory: 48428kb

input:

500000
1 697
1 11
1 698
1 189
1 824
1 524
1 163
1 335
1 959
1 690
1 368
1 168
1 673
1 398
1 918
1 42...

output:

16263658814895739

result:

ok single line: '16263658814895739'

Test #7:

score: 10
Accepted
time: 165ms
memory: 48428kb

input:

500000
1 148
1 159
1 990
1 585
1 837
1 364
1 754
1 576
1 756
1 426
1 502
1 201
1 185
1 251
1 17
1 20...

output:

16307730758229655

result:

ok single line: '16307730758229655'

Test #8:

score: 10
Accepted
time: 313ms
memory: 49020kb

input:

500000
1 252
1 377
1 130
4 779
5 531
4 815
2 176
4 514
9 21
9 142
2 72
11 293
11 579
9 870
7 731
9 3...

output:

48685536049668

result:

ok single line: '48685536049668'

Test #9:

score: 10
Accepted
time: 256ms
memory: 49056kb

input:

500000
1 484
1 48
3 523
2 793
4 822
1 622
3 874
4 54
6 568
4 867
11 500
7 974
4 966
7 793
1 140
1 40...

output:

49118321005585

result:

ok single line: '49118321005585'

Test #10:

score: 10
Accepted
time: 304ms
memory: 49056kb

input:

500000
1 456
2 231
2 525
4 823
2 377
1 72
2 644
5 391
1 984
1 996
7 590
4 604
7 359
3 138
4 843
3 22...

output:

21539113052010528

result:

ok single line: '21539113052010528'

Extra Test:

score: 0
Extra Test Passed