题解 | #[NOIP2014]联合权值#

[NOIP2014]联合权值

https://ac.nowcoder.com/acm/problem/16495

本题不能使用常规做法树形dp,因为相互之间没有联系,无法找到动态转换方程。
所以我们换个思路,我们尝试遍历每个节点作为中转点,也可以称为根,那么它的两边的节点两两配对就可以符合题目的要求。
我们将两边的节点的权值存入一个数组中,先排序,将数组的最后两个节点相乘就是本次最大的答案,不断更新就行。而且,我们在存入的过程中还要维护一个前缀和,这样我们可以求出和的答案,即:ans[j](sum[idx1]ans[j]):ans[j] * (sum[idx - 1] - ans[j])
AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
const long long mod = 10007;
struct node
{
	int to, ne;
} e[3 * N];
int h[N], idx;
void add(int a, int b)
{
	e[++idx].to = b;
	e[idx].ne = h[a];
	h[a] = idx;
}
long long ans[N], sum[N];
int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin >> n;
	for (int i = 1; i < n; i++)
	{
		int a, b;
		cin >> a >> b;
		add(a, b);
		add(b, a);
	}
	vector<long long> a(n + 1);
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	long long _sum = 0, maxx = 0;
	for (int i = 1; i <= n; i++)
	{
		idx = 0;
		sum[idx++] = 0;
		for (int j = h[i]; j; j = e[j].ne)
		{
			int k = e[j].to;
			ans[idx] = a[k];
			sum[idx] = sum[idx - 1] + ans[idx];
			idx++;
		}
		sort(ans + 1, ans + idx);
		maxx = max(maxx, ans[idx - 1] * ans[idx - 2] % mod);
		for (int j = 1; j < idx; j++)
			_sum = (_sum % mod + ans[j] * (sum[idx - 1] - ans[j]) % mod + mod) % mod;
	}
	cout << maxx << ' ' << _sum % mod << endl;
}
全部评论

相关推荐

1 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1150270次浏览 17147人参与
# 通信和硬件还有转码的必要吗 #
11160次浏览 101人参与
# 不去互联网可以去金融科技 #
20215次浏览 255人参与
# 和牛牛一起刷题打卡 #
18743次浏览 1634人参与
# 实习与准备秋招该如何平衡 #
203268次浏览 3625人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4927次浏览 30人参与
# OPPO开奖 #
19150次浏览 267人参与
# 通信硬件薪资爆料 #
265802次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2199次浏览 34人参与
# 互联网公司评价 #
97623次浏览 1279人参与
# 简历无回复,你会继续海投还是优化再投? #
25026次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454716次浏览 5123人参与
# 国企和大厂硬件兄弟怎么选? #
53878次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14628次浏览 349人参与
# 硬件人的简历怎么写 #
82279次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19375次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
27920次浏览 247人参与
# 学历对求职的影响 #
161175次浏览 1804人参与
# 你收到了团子的OC了吗 #
538571次浏览 6386人参与
# 你已经投递多少份简历了 #
344041次浏览 4963人参与
# 实习生应该准时下班吗 #
96932次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63508次浏览 622人参与
牛客网
牛客企业服务