首页 > 其他 > 详细

皇宫看守问题(带权树上独立集)

时间:2019-10-12 19:41:00      阅读:94      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#define maxn 2100
using namespace std;


vector<int>G[maxn];
void insert(int be, int en) {
	G[be].push_back(en);
}
int dp[maxn][10];
int list[maxn];
void dfs(int x, int fa) {
	int d = 0x3f3f3f3f;
	for (int i = 0; i < G[x].size(); i++) {
		int p = G[x][i];
		if (p == fa) continue;
		dfs(p, x);
		dp[x][0] += min(dp[p][1], dp[p][2]);
		dp[x][1] += min(dp[p][1], dp[p][2]);
		dp[x][2] += min(dp[p][1], min(dp[p][2], dp[p][0]));
		d = min(dp[p][2] - min(dp[p][1], dp[p][2]), d);
	}
	dp[x][1] += d;
	dp[x][2] += list[x];
	return;
}
int main() {
	int n;
	scanf("%d", &n);
	int be, k, en;
	for (int i = 1; i <= n; i++) {
		scanf("%d", &be);
		scanf("%d %d", &list[be], &k);
		while (k--) {
			scanf("%d", &en);
			insert(be, en);
			insert(en, be);
		}
	}
	dfs(1, -1);
	printf("%d\n", min(dp[1][1], dp[1][2]));
	return 0;
}

  

皇宫看守问题(带权树上独立集)

原文:https://www.cnblogs.com/lesning/p/11663371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!