60求助
查看原帖
60求助
865793
better_Z楼主2024/7/8 19:41
#include<iostream>
#define maxn 200010
#define int long long
using namespace std;
struct E{
    int to,nxt;
}e[maxn*2];
int head[maxn],cnt;
void add(int a,int b){
    e[++cnt].to=b;
    e[cnt].nxt=head[a];
    head[a]=cnt;
}
int mx=-99999;
int mx1,mx2;
int dis[maxn],n;
int sum1,sum2,ans;
signed main(){
    cin>>n;
    for(int i=1;i<n;i++){
        int u,v;
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }
    for(int i=1;i<=n;i++)cin>>dis[i];
    for(int i=1;i<=n;i++){
        sum1=sum2=0;
        for(int j=head[i];j;j=e[j].nxt){
            int v=e[j].to;
            if(dis[v]>mx1){
                mx2=mx1;
                mx1=dis[v];
            }else if(dis[v]>mx2){
                mx2=dis[v];
            }
            int t=(dis[v]*dis[v])%10007;
            sum1=(sum1+dis[v])%10007;
            sum2=(sum2+t)%10007;
        }
        if(mx1*mx2>mx)mx=mx1*mx2;
        sum1=(sum1*sum1)%10007;
        ans=(ans+sum1-sum2)%10007;
        mx1=mx2=0;
    }
    cout<<mx<<" "<<ans%10007;
    return 0;
}
2024/7/8 19:41
加载中...