dp uva1220
来源:互联网 发布:sybase数据库备份还原 编辑:程序博客网 时间:2024/06/05 01:56
题目链接
树的最大独立集问题
d(u,0) 表示以u为根的子树中,不选u点能得到的最大人数 f(u,0)=1表示唯一,否则不唯一
d(u,1)--------------------------------选u f(u,1)=1表示唯一,否则不唯一
#include <bits/stdc++.h>using namespace std;const int maxn = 200+5;int n,cnt,d[maxn][2],f[maxn][2];vector<int> sons[maxn];map<string,int> dict;int ID(string s){if(!dict.count(s)) dict[s] = cnt++;return dict[s];}int dp(int u,int k){d[u][k] = k;f[u][k] = 1;for(int i=0; i<sons[u].size(); i++){int v = sons[u][i];if(k==1){d[u][k] += dp(v,0);if(!f[v][0]) f[u][k] = 0;}else{d[u][k] += max(dp(v,0),dp(v,1));if(d[v][0]==d[v][1]) f[u][k] = 0;else if(d[v][0]>d[v][1] && !f[v][0]) f[u][k] = 0;else if(d[v][1]>d[v][0] && !f[v][1]) f[u][k] = 0;}}return d[u][k];}int main(){string s,s2;while(cin >> n >> s){cnt = 0;for(int i=0; i<n; i++) sons[i].clear();dict.clear();ID(s);for(int i=0; i<n-1; i++){cin >> s >> s2;sons[ID(s2)].push_back(ID(s));}int ans;ans = max(dp(0,0),dp(0,1));printf("%d ", ans);bool unique = false;if(d[0][0]>d[0][1] && f[0][0]) unique = true;if(d[0][1]>d[0][0] && f[0][1]) unique = true;if(unique) printf("Yes\n");else printf("No\n");}}
0 0
- dp uva1220
- uva1220(基础树形dp)
- UVA1220 树形DP
- Uva1220
- UVA1220树上的dp(基本)
- 【UVa1220】Party at Hali-Bula(树形DP)
- UVa1220 Party at Hali_Bula
- UVa1220 Party at Hali-Bula
- UVa1220 - Party at Hali-Bula
- UVA1220 - Party at Hali-Bula
- 【UVA1220】Party at Hali-Bula
- uva1220树的最大独立集(2 )
- 例题9-13 Hali-Bula的晚会 UVa1220
- Hali-Bula的晚会(UVa1220)详细题解
- UVA1220[Party at Hali-Bula] 树上动态规划
- dp
- dp
- dp
- Android SDK目录及版本号区别
- SQL Server中查询CPU占用高的SQL语句
- 文章标题
- hdu4280——Island Transport(最大流SAP算法)
- Adnroid 微信内置浏览器清除缓存问题
- dp uva1220
- 玩乐购掀起传统电商暗战 购物赚钱吸引消费者青睐
- OC利用TBXML读取xml文件配置好文件后一直报错的处理
- codevs2404糖果
- Java - Collections.sort()的正确使用案例
- Qt4.8.1 之加载QWT控件
- CentOS7 PPTP连接VPN
- iOS TableViewcell 全选删除
- DOJO Dijit布局