求助卡常
查看原帖
求助卡常
213196
Wens楼主2021/10/7 11:04
#include<bits/stdc++.h>
using namespace std;

const int Maxn=1e6+5;
const int Maxm=1e7+5;

inline int Read(){
	int x=0;char ch=0;
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x;
}

int n,m;
int now[Maxn][3],nxtn[Maxm<<1],head[Maxn],nxt[Maxm<<1],to[Maxm<<1],val[Maxm],ans[Maxm];
int in[Maxn];

inline void add(int u,int v,int w){
	++nxt[0];
	to[nxt[0]]=v;
	val[nxt[0]]=w;
	ans[nxt[0]]=-1;
	nxt[nxt[0]]=head[u];
	head[u]=nxt[0];
	nxtn[nxt[0]]=now[u][w];
	now[u][w]=nxt[0];
	return ;
}

inline void dfs(int u,int w){
	while(now[u][w]&&ans[now[u][w]]!=-1)now[u][w]=nxtn[now[u][w]];
	if(!now[u][w]){
		w=w==1?2:1;
		while(now[u][w]&&ans[now[u][w]]!=-1)now[u][w]=nxtn[now[u][w]];
	}
	if(!now[u][w])return ;
	ans[now[u][w]]=0;
	ans[now[u][w]^1]=1;
	int e=now[u][w];
	now[u][w]=nxtn[now[u][w]];
	dfs(to[e],val[e]);
	for(int i=now[u][w];i;i=nxt[i]){
		int v=to[i];
		head[u]=nxt[i];
		if(ans[i]==-1){
			ans[i]=0;
			ans[i^1]=1;
			dfs(v,val[i]);
		}
	}
}

int main(){
//	freopen("data.in","r",stdin);freopen("data.out","w",stdout);
	nxt[0]=1;
	n=Read(),m=Read();
	for(int i=1;i<=m;++i){
		int u=Read(),v=Read(),w=Read();
		add(u,v,w);
		add(v,u,w);
		++in[u];
		++in[v];
	}
	for(int i=1;i<=n;++i){
		if(in[i]&1){
			add(i,n+1,1);
			add(n+1,i,1);
		}
	}
	dfs(1,1);
	for(int i=1;i<=m;++i){
		if(ans[i<<1])putchar('1');
		else putchar('0');
	}
	puts("");
	return 0;
}
2021/10/7 11:04
加载中...