POJ 3342(树形dp)
2016-08-17 10:11
281 查看
wa
#pragma warning(disable:4996) #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<vector> #include<algorithm> #include<iostream> using namespace std; const int INF = 0x3f3f3f3f; string employee[205]; int len; vector<int> list[205]; int dp[205][2]; int n; int find(string str) { int i; for (i = 0; i<len; i++) { if (employee[i] == str) return i; } employee[len] = str; return len++; } void dfs(int father) { for (int i = 0; i < list[father].size(); i++) { int child = list[father][i]; if (list[child].size()>0) dfs(child); dp[father][0] +=max(dp[child][0], dp[child][1]); dp[father][1] += dp[child][0]; } } int main() { //freopen("in.txt", "r", stdin); while (cin >> n, n) { memset(dp, 0, sizeof(dp)); len = 0; for (int i = 0; i <= n; i++) { list[i].clear(); } string str; cin >> str; int x = find(str); for (int i = 2; i <= n; i++) { string str1, str2; str1.clear(); str2.clear(); cin >> str1; cin >> str2; int a, b; a = find(str1); b = find(str2); list[b].push_back(a); } for (int i = 0; i < n; i++) { dp[i][1] = 1; } dfs(0); int Max = -INF; int count = 1; bool flag = true;; if (dp[0][0] == dp[0][1]) { flag = false; } if (flag) { cout << max(dp[0][0], dp[0][1]) << " Yes" << endl; } else { cout << max(dp[0][0], dp[0][1]) << " No" << endl; } } return 0; }
相关文章推荐
- POJ 3342 - Party at Hali-Bula 树形DP+最优解唯一性判断
- poj 3342 树形DP
- poj 3342 树形DP
- poj 3342 Party at Hali-Bula(树形dp)
- POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
- POJ 3342 树形DP入门题
- poj 3342 树形dp_最大独立集合
- Party at Hali-Bula - POJ 3342 树形dp
- 树形DP_____Party at Hali-Bula( POJ 3342 )
- [poj 3342]Party at Hali-Bula 树形dp
- POJ 3342 Party at Hali-Bula 树形DP 最大独立集
- POJ - 3342 - Party at Hali-Bula (树形dp + 判断唯一解)
- poj3342 poj1463 poj3345 树形DP入门
- poj3342树形dp+深度搜索并确定唯一性
- 不能与直系上司同时参加聚会求最大人数 有根树形DP 最大独立集 poj 3342
- poj 3342 树形dp
- POJ - 3342 Party at Hali-Bula 树形DP
- POJ 3342 树形DP+Hash
- poj 3342 Party at Hali-Bula(树形dp)
- POJ 3342 树形DP+Hash