社区讨论
求助!!!
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 条回复,欢迎继续交流。
正在加载回复...