D1T2我的想法,理想时间复杂度O(n)
测出来AC……
可惜考试的时候用的n^2的方法,当时也没有继续想下去了
如此丑陋的代码千万不要嫌弃orz
#include<stdio.h>
int a[200100],b[200100],zhi[200100],chuli[200100]={0},xmax[200100]={0};
int main()
{
int i,ans=0,sum=0,n,max=0;
freopen("link.in","r",stdin);
freopen("link.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n-1;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<=n;i++)
scanf("%d",&zhi[i]);
for(i=1;i<=n-1;i++)
{
ans=xmax[a[i]]*zhi[b[i]];
if(ans>max) max=ans;
if(zhi[b[i]]>xmax[a[i]]) xmax[a[i]]=zhi[b[i]];
sum+=chuli[a[i]]*zhi[b[i]];sum%=10007;
chuli[a[i]]+=zhi[b[i]];chuli[a[i]]%=10007;
ans=xmax[b[i]]*zhi[a[i]];
if(ans>max) max=ans;
if(zhi[a[i]]>xmax[b[i]]) xmax[b[i]]=zhi[a[i]];
sum+=chuli[b[i]]*zhi[a[i]];sum%=10007;
chuli[b[i]]+=zhi[a[i]];chuli[b[i]]%=10007;
}
sum=(sum*2)%10007;
printf("%d %d",max,sum);
return 0;
}
测出来AC……
可惜考试的时候用的n^2的方法,当时也没有继续想下去了
如此丑陋的代码千万不要嫌弃orz
#include<stdio.h>
int a[200100],b[200100],zhi[200100],chuli[200100]={0},xmax[200100]={0};
int main()
{
int i,ans=0,sum=0,n,max=0;
freopen("link.in","r",stdin);
freopen("link.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n-1;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<=n;i++)
scanf("%d",&zhi[i]);
for(i=1;i<=n-1;i++)
{
ans=xmax[a[i]]*zhi[b[i]];
if(ans>max) max=ans;
if(zhi[b[i]]>xmax[a[i]]) xmax[a[i]]=zhi[b[i]];
sum+=chuli[a[i]]*zhi[b[i]];sum%=10007;
chuli[a[i]]+=zhi[b[i]];chuli[a[i]]%=10007;
ans=xmax[b[i]]*zhi[a[i]];
if(ans>max) max=ans;
if(zhi[a[i]]>xmax[b[i]]) xmax[b[i]]=zhi[a[i]];
sum+=chuli[b[i]]*zhi[a[i]];sum%=10007;
chuli[b[i]]+=zhi[a[i]];chuli[b[i]]%=10007;
}
sum=(sum*2)%10007;
printf("%d %d",max,sum);
return 0;
}