聯合權值
阿新 • • 發佈:2018-09-01
span spa clas 搜索 ios sum ont struct from
要根據題目描述看出這是一個樹,然後在樹上搜索......
關於看出這是一個樹,茅佳源老師在寒假的時候提醒過兩次......
然後註意在樹上距離為2的情況有兩種,一種是祖先關系,另一種是並列為兒子......
然後就好了
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 typedef long long ll; 5 const int mod=10007; 6 const int maxn=2e6+7; 7 ll val[maxn],head[maxn]; 8 ll sum,imax,num,n;9 struct Edge{ 10 int next,to; 11 }edge[maxn]; 12 void add(int from,int to){ 13 edge[++num].next=head[from]; 14 edge[num].to=to; 15 head[from]=num; 16 } 17 void build(int u,int pre){ 18 ll su=0,ima=0; 19 for(int i=head[u];i;i=edge[i].next){ 20 int v=edge[i].to;if(v==pre) continue; 21 imax=max(imax,val[pre]*val[v]);imax=max(imax,ima*val[v]); 22 sum+=val[pre]*val[v]%mod;sum+=su*val[v]%mod; 23 su+=val[v];ima=max(ima,val[v]); 24 build(v,u); 25 } 26 } 27 int main(){ 28 cin>>n; 29 for(int i=1;i<n;i++){ 30 int u,v;cin>>u>>v;31 add(u,v);add(v,u); 32 } 33 for(int i=1;i<=n;i++) cin>>val[i]; 34 build(1,0); 35 cout<<imax<<" "<<sum*2%mod<<endl; 36 return 0; 37 }
聯合權值