【树形动态规划】poj3342 Party at Hali-Bula
来源:互联网 发布:丝绸之路大数据产业园 编辑:程序博客网 时间:2024/05/17 06:04
代码好长,调了2个小时。。。。
#include<iostream>#include<stdio.h>#include<vector>#include<cstring>#include<algorithm>using namespace std;vector<int> v[20005];int n,maximum,boss,record[20005][2];char str[20005][105],str_boss[20005][105];bool notUnique[20005][2];int dp(int node, bool selected);bool notUniqueFun(int node,bool selected);int getBoss(int number);int main(){while(scanf("%d",&n)&&n){for(int i=0;i<n;i++){v[i].clear();record[i][0]=-1;record[i][1]=-1;notUnique[i][0]=false;notUnique[i][1]=false;}scanf("%s",str[0]);for(int i=1;i<n;i++)scanf("%s%s",str[i],str_boss[i]);for(int i=1;i<n;i++){boss=getBoss(i);v[boss].push_back(i);}//get the resultmaximum=max(dp(0,true),dp(0,false));cout<<maximum<<" ";if(dp(0,true)>dp(0,false)&¬UniqueFun(0,true)==true)cout<<"No"<<endl;else if(dp(0,true)>dp(0,false)&¬UniqueFun(0,true)==false)cout<<"Yes"<<endl;else if(dp(0,true)==dp(0,false))cout<<"No"<<endl;else if(dp(0,true)<dp(0,false)&¬UniqueFun(0,false)==true)cout<<"No"<<endl;else cout<<"Yes"<<endl;}return 0;} bool notUniqueFun(int node,bool selected){if(selected==false&¬Unique[node][0]==true)return true;if(selected==true&¬Unique[node][1]==true)return true;int len=v[node].size();if(selected==true){for(int i=0;i<len;i++){if(notUniqueFun(v[node][i],false)==true){notUnique[node][1]=true;return true;}}}else if(selected==false){for(int i=0;i<len;i++){int number1=record[v[node][i]][1],number2=record[v[node][i]][0];if(number1==number2){notUnique[node][0]=true;return true;}else if(number1>number2&¬UniqueFun(v[node][i],true)==true){notUnique[node][0]=true;return true;}else if(number2>number1&¬UniqueFun(v[node][i],false)==true){notUnique[node][0]=true;return true;}//end if}//end for loop}//end else ifreturn false;}//记忆化搜索 int dp(int node,bool selected){if(selected==false&&record[node][0]!=-1)return record[node][0];else if(selected==true&&record[node][1]!=-1)return record[node][1];int sum=0;int len=v[node].size();if(selected==true){for(int i=0;i<len;i++)sum+=dp(v[node][i],!selected);}else if(selected==false){for(int i=0;i<len;i++){sum+=max(dp(v[node][i],true),dp(v[node][i],false));}}if(selected==false){record[node][0]=sum;return sum;}else{record[node][1]=sum+1;return sum+1;}}int getBoss(int number){for(int i=0;i<n;i++){if(strcmp(str[i],str_boss[number])==0)return i;}return 0;}
- 【树形动态规划】poj3342 Party at Hali-Bula
- POJ3342 Party at Hali-Bula 树形DP
- POJ3342 Party at Hali-Bula(树形DP)
- Party at Hali-Bula POJ3342
- poj3342 Party at Hali-Bula
- poj3342 Party at Hali-Bula
- HDU2412 && POJ3342:Party at Hali-Bula(树形DP)
- 树形DP解 POJ3342-Party at Hali-Bula
- 树形动态规划 POJ 3342 Party at Hali-Bula
- poj3342——Party at Hali-Bula
- POJ3342 HDU2412 Party at Hali-Bula
- POJ3342——Party at Hali-Bula
- POJ3342 Party at Hali-Bula(树的最大独立集-树形DP-刷表法)
- 【UVA】1220-Party at Hali-Bula?(动态规划,树)
- UVA1220[Party at Hali-Bula] 树上动态规划
- Party at Hali-Bula-----树形dp
- 【树形DP】Party at Hali-Bula
- HDU2421 Party at Hali-Bula 树形DP
- 常量和Action的处理流程
- Oracle里rownum的用法
- VC++6错误检查工具
- javascript增删改查节点
- Android 动画框架详解(第 1 部分)
- 【树形动态规划】poj3342 Party at Hali-Bula
- 网页打印javascript:window.print()
- POJ1008·Maya Calendar
- 检查系统软件版本
- 国际化常用类及国际化标签
- Socket 模型
- Action中的方法调用和自定义类型转换器
- linux expr命令参数及用法详解
- 作用域和自定义拦截器