poj 3342
来源:互联网 发布:配电计算软件注册 编辑:程序博客网 时间:2024/06/05 02:35
按照lrj思路实现的树上dp,病后第一题,明天继续
#include<cstdio>// 0 don't choose 1 choose #include<cstdlib>#include<cstring>#include<iostream>using namespace std;int i,n;char a[205][30],ch[205][30];int bo[205],d[205][5];bool f[205][5];int search(char *b){for(int j=0; j<n; j++){if(strcmp(b,a[j])==0){return j;}}return -2;}void dp(int i){if(d[i][1]>0) return;int j,v;for(j=1; j<n; j++){if(bo[j]==i){dp(j);if(d[j][0]>d[j][1])v=0;else if(d[j][1]>d[j][0]) v=1;else f[i][0]=1;d[i][0]+=max(d[j][0],d[j][1]);if(f[j][v]==1) f[i][0]=1;d[i][1]+=d[j][0];if(f[j][0]==1) f[i][1]=1;}}d[i][1]+=1;}int main(){int v;while(scanf("%d", &n) && n){memset(a,'\0',sizeof(a));memset(d,0,sizeof(d));memset(f,0,sizeof(f));cin>>a[0]; bo[0]=-1;for(i=1; i<n; i++) cin>>a[i]>>ch[i];for(i=1; i<n; i++) bo[i] = search(ch[i]);dp(0);cout<<max(d[0][0],d[0][1])<<' ';if(d[0][0]>d[0][1]) v=0;else if(d[0][1]>d[0][0]) v=1;else v=2;if(v==2||f[0][v]==1) cout<<"No"<<endl;else cout<<"Yes"<<endl;}return 0;}
阅读全文
0 0
- POJ 3342
- POJ 3342
- poj 3342
- poj 3342 树形DP
- poj 3342 树形DP
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- 浅谈数据库优化原则
- mybatis之sql传递参数映射(六)
- Mycat之——读写分离与主从切换案例
- Mybatis-初学
- 论文阅读:Instance-sensitive Fully Convolutional Networks
- poj 3342
- 局域网 FTP建立,搭建一个简易的局域网服务器
- SQL注入关键词大全
- 中国剩余定理(CRT):求解模线性方程组
- Static关键字用法总结
- 五大常用算法之二:动态规划算法
- js中的跨域
- 深入理解计算机操作系统(2.2.2 2.2.3)
- 对const关键字的理解 时间:2017-01-05作者:华清远见