Uva-1220 Party at Hali-Bula
来源:互联网 发布:早岁那知世事艰 编辑:程序博客网 时间:2024/06/06 09:53
题目链接:Party at Hali-Bula
题目大意:给一棵树,父节点和其子结点不能同时染色,问最多可以选取多少个结点染色,如果解唯一则输出Yes否则输出No。
解题思路:树形DP,dp[i][0]表示标号为i的节点不染色的最大选取值,dp[i][1]则是染色时的情况。更新的时候再判断一下唯一性:
1.dp[v][0] == dp[v][1]子节点是否染色都一样,则dp[u][0]不唯一。
2.子节点必须(不)染色,且此自最优解不唯一,则dp[u][0]不唯一。
代码如下:
#include <map>#include <set>#include <cmath>#include <queue>#include <stack>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef pair<int, int> P;const int inf = 0x3f3f3f3f;const int maxn = 2e4 + 15;bool Yuitsu, foo[205][2];int n, dp[205][2];vector<int> chd[205];map<string, int> ha;void DFS(int u){ if(dp[u][0] != -1 && dp[u][0] != -1) return; if(!chd[u].size()){ dp[u][0] = 0; dp[u][1] = 1; return; } dp[u][1] = 1; dp[u][0] = 0; for(int i = 0; i < chd[u].size(); i++){ int v = chd[u][i]; DFS(v); dp[u][1] += dp[v][0]; if(foo[v][0]) foo[u][1] = true; dp[u][0] += max(dp[v][0], dp[v][1]); if(dp[v][0] == dp[v][1]) foo[u][0] = true; if(dp[v][0] > dp[v][1] && foo[v][0]) foo[u][0] = true; if(dp[v][1] > dp[v][0] && foo[v][1]) foo[u][0] = true; } return;}int main(){#ifdef NEKO freopen("Nya.txt", "r", stdin);#endif ios::sync_with_stdio(false); cin.tie(0); string l, r; while(cin >> n && n){ for(int i = 0; i <= n; i++) chd[i].clear(); memset(dp, -1, sizeof dp); ha.clear(); memset(foo, false, sizeof foo); cin >> l; ha[l] = 0; Yuitsu = true; for(int i = 1; i < n; i++){ cin >> l >> r; if(!ha.count(l)) ha.insert({ l, ha.size() }); if(!ha.count(r)) ha.insert({ r, ha.size() }); chd[ha[r]].push_back(ha[l]); } DFS(0); if(dp[0][1] == dp[0][0]) Yuitsu = false; if(dp[0][1] > dp[0][0] && foo[0][1]) Yuitsu = false; if(dp[0][1] < dp[0][0] && foo[0][0]) Yuitsu = false; int ans = max(dp[0][1], dp[0][0]); cout << ans << ' ' << (Yuitsu == true ? "Yes" : "No") << endl; } return 0;}
0 0
- Uva-1220-Party at Hali-Bula
- UVA 1220Party at Hali-Bula
- UVA - 1220 Party at Hali-Bula
- UVa 1220 Party at Hali-Bula
- Uva-1220 Party at Hali-Bula
- uva 1220 - Party at Hali-Bula
- UVA-1220 Party at Hali-Bula
- UVA 1220(p282)----Party at Hali-Bula
- UVa OJ 1220 - Party at Hali-Bula
- UVA 1220 Party at Hali-Bula
- Party at Hali-Bula UVA
- Party at Hali-Bula(UVA
- Party at Hali-Bula UVA
- Party at Hali-Bula UVA
- 【UVA】1220-Party at Hali-Bula?(动态规划,树)
- uva 1220 - Party at Hali-Bula 【入门树形dp】
- UVA 1220 / HDOJ 2412 Party at Hali-Bula 树形DP
- UVa #1220 Party at Hali-Bula (例题9-13)
- https://readthedocs.org/
- LeetCode----Merge k Sorted Lists
- 迟到问题,其实不扣钱的话就不是问题……
- android屏幕适配
- 测试基础
- Uva-1220 Party at Hali-Bula
- uva 11294 - Wedding(2 sat)
- java基础—7.多线程
- 制作easyui部门选择插件
- 构造,析构与初始化列表
- ios8绘图方法小记touchesBegan&touchesMoved
- android logging 机制及优化
- react-native试玩(11)-模态
- 零基础学python-12.1 while循环