标签:des style http java color strong
6 Jason Jack Jason Joe Jack Jill Jason John Jack Jim Jill 2 Ming Cho Ming 0
4 Yes 1 No
树形dp,每个人只有一个领导,big boss没有领导,领导和员工不能同时在场。
dp[f][1]+=dp[v][0]; 若dp[v][0]选择不为一,则dp[f][1]也不唯一。
dp[f][0]+=max(dp[v][1],dp[v][0]); 同上;另外,若dp[v][1],dp[v][0]相等,则也不唯一。
#include"stdio.h" #include"string.h" #define N 205 #define M 105 int k,cnt,head[N],mark[N]; char str[N][M]; struct node { int v,next; }e[N]; struct st { int s,flag; }dp[N][2]; int find(char*s) //查找该点是否出现过 { int i; for(i=0;i<k;i++) { if(strcmp(str[i],s)==0) break; } if(i==k) strcpy(str[k++],s); return i; } void add(int u,int v) //存有向边关系,u指向v { e[cnt].v=v; e[cnt].next=head[u]; head[u]=cnt++; } void dfs(int f) { int u=head[f]; mark[f]=1; dp[f][1].s=1; while(u!=-1) { int v=e[u].v; if(!mark[v]) { dfs(v); dp[f][1].s+=dp[v][0].s; if(dp[v][0].flag==1) dp[f][1].flag=1; if(dp[v][0].s>dp[v][1].s) { dp[f][0].s+=dp[v][0].s; if(dp[v][0].flag==1) dp[f][0].flag=1; } else if(dp[v][0].s<dp[v][1].s) { dp[f][0].s+=dp[v][1].s; if(dp[v][1].flag==1) dp[f][0].flag=1; } else { dp[f][0].s+=dp[v][1].s; dp[f][0].flag=1; } } u=e[u].next; } } int main() { int i,n; char s1[M],s2[M]; while(scanf("%d",&n),n) { k=cnt=0; memset(head,-1,sizeof(head)); scanf("%s",str[k++]); for(i=1;i<n;i++) { scanf("%s %s",s1,s2); int u,v; u=find(s2); v=find(s1); add(u,v); } memset(mark,0,sizeof(mark)); memset(dp,0,sizeof(dp)); dfs(0); int ans,flag=0; if(dp[0][0].s>dp[0][1].s) { ans=dp[0][0].s; flag=dp[0][0].flag; } else if(dp[0][0].s<dp[0][1].s) { ans=dp[0][1].s; flag=dp[0][1].flag; } else { ans=dp[0][0].s; flag=1; } printf("%d ",ans); if(flag) printf("No\n"); else printf("Yes\n"); } return 0; }
hdu 2412 Party at Hali-Bula,布布扣,bubuko.com
标签:des style http java color strong
原文地址:http://blog.csdn.net/u011721440/article/details/37958299