比赛 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;
}