第9个点WA,求助
查看原帖
第9个点WA,求助
1041071
ltz761222楼主2024/11/12 19:17

讲横纵坐标看做点,遍历图并染色

//
#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;
}
/**/

2024/11/12 19:17
加载中...