社区讨论

求助!!!

UVA1220Hali-Bula的晚会 Party at Hali-Bula参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi6uavhr
此快照首次捕获于
2025/11/20 10:56
4 个月前
此快照最后确认于
2025/11/20 10:56
4 个月前
查看原帖
这道题有什么陷阱吗? 代码哪里有问题:
CPP
#include<bits/stdc++.h>
using namespace std;
struct sd{
	int num,maxx[2],way[2];
	vector<int>son;
}work[205];
int n,cnt;
map<string,int> box;
string s1,s2;
void dp(int x)
{
	if(work[x].num==0) 
	{
		work[x].maxx[0]=0;
		work[x].maxx[1]=1;return;
	}
	else
	{
		for(int i=0;i<work[x].num;++i)
		{
			dp(work[x].son[i]);
			work[x].maxx[1]+=work[work[x].son[i]].maxx[0];work[x].way[1]+work[work[x].son[i]].way[0];
			if(work[work[x].son[i]].maxx[0]==work[work[x].son[i]].maxx[1])
			 {
			 	work[x].maxx[0]+=work[work[x].son[i]].maxx[0];
			 	work[x].way[0]+=2;
			 }
			 else
			 {
			 	if(work[work[x].son[i]].maxx[0]>work[work[x].son[i]].maxx[1])
			 	 {
			 	 	work[x].maxx[0]+=work[work[x].son[i]].maxx[0];
			 	 	work[x].way[0]+=work[work[x].son[i]].way[0];
			 	 }
			 	 else
			 	 {
			 	 	work[x].maxx[0]+=work[work[x].son[i]].maxx[1];
			 	 	work[x].way[0]+=work[work[x].son[i]].way[1];
			 	 }
			 }
		}
		work[x].maxx[1]++;
	}
}
int main()
{
	while(scanf("%d",&n)!=EOF&&n!=0)
	{
		cnt=0;memset(work,0,sizeof(work));box.clear();
		cin>>s1;box[s1]=++cnt;
		for(register int i=1;i<=n-1;++i)
		{
			cin>>s1>>s2;
			if(!box[s1]) box[s1]=++cnt;
			if(!box[s2]) box[s2]=++cnt;
			work[box[s2]].num++;work[box[s2]].son.push_back(box[s1]);
		}
		dp(1);
        if(work[1].maxx[0]>work[1].maxx[1])
        {
        	if(work[1].way[0]!=0) printf("%d No\n",work[1].maxx[0]);
        	else printf("%d Yes\n",work[1].maxx[0]);
        }
        else
        {
        	if(work[1].maxx[0]==work[1].maxx[1])
        	{
        		printf("%d No\n",work[1].maxx[0]);
        	}
        	else
        	{
        		if(work[1].way[1]!=0) printf("%d No\n",work[1].maxx[1]);
        	    else printf("%d Yes\n",work[1].maxx[1]);
        	}
        }
        //for(int i=1;i<=n;++i)
       // printf("%d %d %d %d %d\n",work[i].maxx[0],work[i].maxx[1],work[i].way[0],work[i].way[1],work[i].num);
        //cout<<endl;
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...