比赛 |
9.6 |
评测结果 |
W |
题目名称 |
真正的说谎者 |
最终得分 |
0 |
用户昵称 |
KKZH |
运行时间 |
0.020 s |
代码语言 |
C++ |
内存使用 |
3.45 MiB |
提交时间 |
2024-09-06 21:59:14 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,fa[5010],m,k,ans=0,e,t,a[2],p2=0,l=0;
vector <int>nifa[5010];
priority_queue <int> que;
int find(int x){
if(fa[x]==x){
return x;
}else{
return fa[x]=find(fa[x]);
}
}
void g(int x,int y){
int tx=find(x),ty=find(y);
if(tx!=ty){
nifa[tx].push_back(ty);
fa[ty]=tx;
}
}
int p(int x){
int an=1;
if(nifa[x].empty()){
return 1;
}
for(int i=0;i<nifa[x].size();i++){
an+=p(nifa[x][i]);
}
return an;
}
void p1(int x){
if(nifa[x].empty()){
que.push(x);
return;
}
for(int i=0;i<nifa[x].size();i++){
p1(nifa[x][i]);
}
}
int main(){
freopen("trueliars.in","r",stdin);
freopen("trueliars.out","w",stdout);
while(1){
cin>>m>>t>>e;
if(m==0&&t==0&&e==0){
return 0;
}
l=0;
n=t+e;
ans=0;
p2=0;
l=0;
for(int i=1;i<=n*2;i++){
fa[i]=i;
}
for(int i=0;i<m;i++){
int x,y;
string z;
cin>>x>>y>>z;
if(z.size()==3){
g(x,y);
}else{
g(x,y+n);
g(y,x+n);
}
}
for(int i=1;i<=n;i++){
if(fa[i]==i){
if(ans==2){
p2=1;
a[l]=i;
l++;
cout<<"no"<<endl;
}
ans++;
}
}
if(p2==0){
if(t==e){
cout<<"no"<<endl;
}
else{
int x=p(a[0]);
int y=p(a[1]);
if(x==t){
p1(a[0]);
}else{
p1(a[1]);
}
while(!que.empty()){
cout<<que.top()+1<<endl;
que.pop();
}
cout<<"end"<<endl;
}
}
}
return 0;
}