Codevs 3728 联合权值 题解

来源:互联网 发布:淘宝客qq群链接生成 编辑:程序博客网 时间:2024/06/05 09:58

3728 联合权值

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold


题目描述 Description

输入描述 Input Description

输出描述 Output Description

blob.png

样例输入 Sample Input

样例输出 Sample Output

数据范围及提示 Data Size & Hint







#include<iostream>#include<cstdio>#include<vector>using namespace std;vector<int>t[200010];int a[200010],u,v,sum=0,pow=0,m1=0,m2=0,n,k,ans,sm;int main(){cin>>n;for(int i=1;i<=n-1;i++){cin>>u>>v;t[u].push_back(v);t[v].push_back(u);}for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){    m1=m2=0;sum=pow=0;for(int j=0;j<t[i].size();j++){k=a[t[i][j]];sum+=k;sum%=10007;pow+=(k*k);pow%=10007;if(k>m1){m2=m1;m1=k;}else if(k>m2)m2=k;}//cout<<i<<' '<<m1*m2<<' '<<sum*sum-pow<<endl;;sum=sum%10007;pow=pow%10007;if(sm<(m1*m2))sm=m1*m2;ans+=(sum*sum-pow);ans%=10007;}//for(int i=0;i<n;i++)for(int j=0;j<t[i].size();j++){//k=a[t[i][j]];//cout<<i<<j<<k<<endl;//}cout<<sm<<' '<<ans;return 0;}


时间复杂度 O(n)

权值为2→同一个点相邻的两个点

用(m1+m2+m3+……)^2-m1^2-m2^2-……累加求和

注意最大值和次大值 注意最大值和次大值 注意最大值和次大值

0 0
原创粉丝点击