- 联合权值
- 2017-11-01 23:53:32 @
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MOD=10007;
vector <int> e[200001];
int s[200001],w[200001];
long long int ans1,ans2;
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n-1;i++){
int u,v;
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
for(int i=1;i<=n;i++) scanf("%d",&w[i]);
for(int i=1;i<=n;i++){
int m1=0,m2=0;
for(int j=0;j<e[i].size();j++){
int p=e[i][j];
s[i]+=w[p];
if(w[p]>m2){
if(w[p]>=m1){
m2=m1;
m1=w[p];
}
else m2=w[p];
}
}
if(m1*m2>ans1) ans1=m1*m2;
//ans1=max(ans1,m1*m2);
}
for(int i=1;i<=n;i++){
for(int j=0;j<e[i].size();j++){
int p=e[i][j];
ans2=(ans2+w[p]*(s[i]-w[p]))%MOD;
}
}
printf("%lld %lld",ans1,ans2);
}
找不出错了。。。。。。求神犇帮助
0 条评论
目前还没有评论...