0
点赞
收藏
分享

微信扫一扫

Codeforces Round #772 (Div. 2) E. Cars

云岭逸人 2022-03-30 阅读 38
c++
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,m,col[N];
vector<int> g1[N],g2[N];
struct node{
	int a,b,c;
}k[N];
int fl=0,in[N],res[N];
void dfs(int x,int fa){
	for(auto to:g1[x]){
		if(to==fa) continue;
		if(col[to]&&col[to]==col[x]) fl=1;
		if(col[to]) continue;
		col[to]=(col[x]==1?2:1);
		dfs(to,x);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int op,x,y;scanf("%d%d%d",&op,&x,&y);
		k[i]={op,x,y};
		g1[x].push_back(y);
		g1[y].push_back(x);
	}
	// col[1]=1;dfs(1,0);
	for(int i=1;i<=n;i++){
		if(!col[i]) {
			col[i]=1;
			dfs(i,0);
		}
	}
	// for(int i=1;i<=n;i++) cout<<col[i]<<" ";cout<<endl;
	if(fl==1){cout<<"NO"<<endl;return 0;}
	int cnt=0;
	for(int i=1;i<=m;i++){
		int op=k[i].a,x=k[i].b,y=k[i].c;
		if(op==1){
			if(col[x]==1) g2[x].push_back(y),in[y]++;
			else g2[y].push_back(x),in[x]++;
		}else{
			if(col[x]==2) g2[x].push_back(y),in[y]++;
			else g2[y].push_back(x),in[x]++;
		}
	}
	queue<int> q;for(int i=1;i<=n;i++) if(!in[i]) q.push(i);
	while(q.size()){
		int tp=q.front();q.pop();
		res[tp]=++cnt;
		for(auto to:g2[tp]){
			if(!(--in[to])) q.push(to);
		}
	}
	if(cnt!=n){cout<<"NO"<<endl;return 0;}
	cout<<"YES"<<endl;
	for(int i=1;i<=n;i++) {
		// cout<<i<<" "<<res[i]<<endl;
		if(col[i]==1) cout<<'L'<<" "<<res[i]<<endl;
		else cout<<'R'<<" "<<res[i]<<endl;
	}
}
举报

相关推荐

0 条评论