标签: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