ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#211839 | #3807. 随机游走 | drdilyor | 100 | 1326ms | 102756kb | C++11 | 1.4kb | 2024-10-07 14:56:01 | 2024-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