1 条题解

  • 1
    @ 2023-8-19 16:37:39
    #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

    「NOIP2014 提高组」联合权值

    信息

    ID
    1450
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    22
    已通过
    15
    上传者