题意:
坐标轴有两辆车
1第一种相向而行
2 第二种相背而行
先二分图跑出来他的方向
如果不符合直接no
再根据他的拓扑关系跑一边拓扑排序
(开了ios)输出就乱码!!!!这就是cf吧
#include <bits/stdc++.h>
using namespace std;
#define int long long
//typedef long long ll;
typedef pair<int,int> pii;
#define x first
#define y second
#define pb push_back
#define inf 1e18
#define IOS std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fer(i,a,b) for(int i=a;i<=b;i++)
#define der(i,a,b) for(int i=a;i>=b;i--)
const int maxn=1e5+10;
const int mod=1e9+7;
/*ll qsm(int a,int b)
{ll res=1; while(b){ if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res;}
*/
const int N=2e5+10;
int dr[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,k;
int m;
int col[N];
vector<int>g[N];
int op[N];
int x[N];
int y[N];
int f;
int du[N];
vector<int>q[N];
int ans[N];
void dfs(int u)
{
for(auto v:g[u])
{
if(col[v]==col[u])
{
f=1;
}
if(col[v]==-1)
{
col[v]=col[u]^1;
dfs(v);
}
}
}
void solve()
{
memset(col,-1,sizeof(col));
cin>>n>>m;
fer(i,1,m)
{
cin>>op[i]>>x[i]>>y[i];
g[x[i]].pb(y[i]);
g[y[i]].pb(x[i]);
}
fer(i,1,n)
{
if(col[i]==-1)
col[i]=0;
dfs(i);
}
if(f){
printf("NO\n");
return ;
}
fer(i,1,m)
{
if(col[x[i]]) swap(x[i],y[i]);
if(op[i]==1) q[x[i]].pb(y[i]) ,du[y[i]]++;
else q[y[i]].pb(x[i]),du[x[i]]++;
}
queue<int>t;
fer(i,1,n) if(!du[i])t.push(i);
int cnt=0;
while(!t.empty())
{
int u=t.front();
t.pop();
ans[u]=++cnt;
for(auto v:q[u])
{
du[v]--;
if(!du[v])t.push(v);
}
}
if(cnt!=n){
printf("NO\n");
return ;
}
printf("YES\n");
fer(i,1,n)
{
cout<<(col[i]?"R":"L")<<" "<<ans[i]<<endl;
}
}
signed main()
{
// IOS;
int _=1;
//cin>>_;
while(_--) solve();
return 0;
}