80分求助,WA了#6和#10
查看原帖
80分求助,WA了#6和#10
291330
MuthLuck楼主2022/10/28 15:42
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N = 200010 , M = N * 2 , mod = 10007;
int h[M] , e[M] , ne[M] , idx;
bool st[N];
int n;
LL maxnum , sum , w[M];

void add(int a , int b)
{
	e[idx] = b , ne[idx] = h[a] , h[a] = idx ++ ;
}

void dfs(int u , LL from)
{
	st[1] = true;
	LL sum2 = from % mod , sum3 = (from * from) % mod;
	for (int i = h[u] ; ~i ; i = ne[i])
	{
		int j = e[i];
		if (st[j]) continue;
		st[j] = true;
		
		sum2 = (sum2 + w[j]) % mod ,  sum3 = (sum3 + w[j] * w[j]) % mod;
		dfs(j , w[u]);
		
		maxnum = max(maxnum , (LL)w[j] * from);
		from = max(from , w[j]);
	}
	
	sum = ((LL)(sum2 * sum2) % mod - sum3 + sum) % mod;
}

int main()
{
	//freopen("link.in" , "r" , stdin);  
	//freopen("link.out" , "w" , stdout);
	scanf("%d" , &n);
	memset(h , -1 , sizeof h);
	memset(st , false , sizeof st);
	
	for (int i = 1 ; i <= n - 1 ; i ++ )
	{
		int a , b;
		scanf("%d%d" , &a , &b);
		add(a , b) , add(b , a);
	}
	
	for (int i = 1 ; i <= n ; i ++ )
		scanf("%lld" , &w[i]);
	
	dfs(1 , 0);
	sum %= mod;
	printf("%lld %lld\n" , maxnum , sum);
	
	return 0;
}
2022/10/28 15:42
加载中...