uva 1220 - Party at Hali-Bula
来源:互联网 发布:java最简单小游戏程序 编辑:程序博客网 时间:2024/05/19 08:02
//uva 1220 - Party at Hali-Bula/* 赤裸裸的树的最大独立集 对于以i为根的子树,其最大独立集为 d[i]. 则有 d[i] = max(sum(d[j]),sum(d[k]) +1 ) . 其中d[j]表示 d[i]的儿子节点最大独立集.d[k]表示d[i]的孙子节点的最大独立集。 在这里我们可以使用递归的方法来求得这个d数组。使用flag标记当取得最优值的时是那种情况。 */#include <iostream>#include <queue>#include <stack>#include <stdio.h>#include <stdlib.h>#include <math.h>#include<vector>#include <string.h>#include <algorithm>#include <set>#include <map>#include <cstdio>#define ll long longusing namespace std ;const int maxn = 210 ;vector<int> son[maxn] ;int flag[maxn];int d[maxn] ;int dp(int u ){ if (d[u]!=-1) { return d[u] ; } if (!son[u].size()) { flag[u]=0 ; return d[u] = 1 ; } else{ int len = (int)son[u].size() ; int ans1 =0,ans2 = 0 ; for (int i = 0; i < len; i++) { int v = son[u][i] ; ans1 += dp(v) ; int len1 = (int)son[v].size() ; for (int j = 0 ; j < len1; j++) { ans2+= dp(son[v][j]) ; } } ans2+=1 ; if (ans2 == ans1) { flag[u] = 1 ; return d[u] = ans1 ; } else{ if (ans1 > ans2) { flag[u] = 2 ; d[u] = ans1 ; } else{ flag[u] = 3 ; d[u] = ans2 ; } return d[u] ; } }}bool isOnlyOne(int u){ if (flag[u]==1 ) { return true ; } else if(flag[u]==2){ int len = (int)son[u].size() ; for (int i = 0; i < len; i++) { if (isOnlyOne(son[u][i])) { return true ; } } } else if(flag[u] == 3 ){ int len = (int)son[u].size() ; for (int i = 0; i < len; i++) { int v = son[u][i] ; int len2 = (int)son[v].size() ; for (int j = 0 ; j < len2; j++) { if (isOnlyOne(son[v][j])) { return true ; } } } } else{ return false ; } return false ;}map<string , int > name ;int main() { int n ; string str,str1 ; int t = 0 ; while (scanf("%d" , &n),n) { t = 0 ; cin>>str ; name.clear() ; name[str] = 0 ;t++ ; for (int i = 0; i <n+1; i++) { son[i].clear() ; } int b ,sub ; for (int i = 0; i < n -1; i++) { cin >>str>>str1 ; if (name.count(str)) { b = name[str] ; } else { b = t++ ;name[str] = b ; } if (name.count(str1)) { sub = name[str1] ; }else { sub = t++ ;name[str1] = sub ; } son[sub].push_back(b) ; } memset(flag, 0, sizeof(flag)) ; memset(d, -1, sizeof(d)) ; cout<<dp(0) ; if (isOnlyOne(0)) { cout<<' '<<"No" ; } else{ cout << ' ' <<"Yes"; } cout << 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)
- CSS样式----图文详解:css样式表和选择器
- linux shell学习 记录2 if elif case for while until 语法
- vijos P1966 夜夜的旅游计划
- HDOJ 2647 Reward(反拓扑+统计节点)
- 求二分图点权最小覆盖的一类问题 HDU 1054 1565 1569
- uva 1220 - Party at Hali-Bula
- POJ 3026 Borg Maze 最小生成树
- CocoaPods安装和使用教程
- USACO 2.4 Overfencing (BFS)
- 数据结构【线性表(二)链表】项目之自建算法库—单链表
- 132 Palindrome Partitioning II [Leetcode]
- Experian遭黑,造成T-Mobile1500万用户数据泄露
- 滴滴打车And 360 校招 2016 在线笔试(二)
- 利用R语言的ggplot2包画分组boxplot