zoukankan      html  css  js  c++  java
  • 皇宫看守问题(带权树上独立集)

     

    #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
    ", min(dp[1][1], dp[1][2]));
    	return 0;
    }
    

      

    寻找真正的热爱
  • 相关阅读:
    (判断是否为弱联通分量) poj 2762
    (最大生成树) poj 1979
    (暴力) bzoj 2208
    (BFS) bzoj 1102
    (并查集) bzoj 1161
    (数学) bzoj 1800
    (博弈) bzoj 2460
    (dinic) poj 3469
    (双端队列优化的SPFA) bzoj 2100
    (判断负环) bzoj 2019
  • 原文地址:https://www.cnblogs.com/lesning/p/11663371.html
Copyright © 2011-2022 走看看