讲横纵坐标看做点,遍历图并染色
//
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e5+10;
struct node{
int v,ne,x,li;
}b[N<<2];int h[N<<1],idx;
bool vis[N<<1],color[N<<1];
int m;
void add(int u,int v)
{
b[++idx]={v,h[u],-1},h[u]=idx;
if (idx%2==1)
b[idx].li=idx+1;
else
b[idx].li=idx-1;
}
void dfs(int w)
{
vis[w]=true;
for (int i=h[w];i;i=b[i].ne)
if (b[i].x==-1)
{
b[i].x=b[b[i].li].x=color[w],color[b[i].v]=color[w]^1,color[w]^=1;
dfs(b[i].v);
return ;
}
}
int main()
{
int u,v;
scanf ("%d",&m);
for (int i=1;i<=m;i++)
scanf ("%d %d",&u,&v),add(u,v+N),add(v+N,u);
for (int k=1;k<=(N<<1);k++)
if (!vis[k]&&h[k])
dfs(k);
for (int i=1;i<=(m<<1);i+=2)
if (b[i].x==1)
printf("r");
else
printf("b");
return 0;
}
/**/