1 条题解
-
1
#include <bits/stdc++.h> #define int long long using namespace std; const int mod=10007; const int Max=200010; int n,m,size,ans1,ans2; int first[Max],w[Max],f[Max][2]; struct shu{int to,next;}; shu edge[Max<<1]; inline int get_int() { int x=0,f=1; char c; for(c=getchar();(!isdigit(c))&&(c!='-');c=getchar()); if(c=='-') f=-1,c=getchar(); for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0'; return x*f; } inline void build(int x,int y) { edge[++size].next=first[x]; first[x]=size; edge[size].to=y; } inline int dfs(int point) { int max1=0,max2=0,sum=0; for(int u=first[point];u;u=edge[u].next) { int to=edge[u].to; ans2=(ans2+sum*w[to]); sum+=w[to]; if(w[to] > max1) max2=max1,max1=w[to]; else max2=max(max2,w[to]); } ans1=max(ans1,max1*max2); } signed main() { n=get_int(); for(int i=1;i<=n-1;i++) { int x=get_int(),y=get_int(); build(x,y),build(y,x); } for(int i=1;i<=n;i++) w[i]=get_int(); for(int i=1;i<=n;i++) dfs(i); cout<<ans1<<" "<<ans2*2%mod<<"\n"; return 0; }
- 1
信息
- ID
- 1450
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 22
- 已通过
- 15
- 上传者