比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 AAAAAAAAAA
题目名称 Asm.Def的游戏 最终得分 100
用户昵称 真香警告 运行时间 0.102 s
代码语言 C++ 内存使用 45.13 MiB
提交时间 2019-10-23 17:43:38
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn=1000100;
int n,m;
int tot;
int ans;
int head[maxn];
int sum[maxn];
int in[maxn];
int out[maxn];
bool vis[maxn];

struct edge{
	int to;
	int nxt;
}e[2*maxn];

inline int read(){
	int w=1,x=0,ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') w=-1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
	return w*x;
}

void add(int x,int y){
	tot++;
	e[tot].to=y;
	e[tot].nxt=head[x];
	head[x]=tot;
}

void dfs(int x){
	vis[x]=1;
	for(register int i=head[x];i;i=e[i].nxt){
		int y=e[i].to;
		sum[x]++;
		if(vis[y]) continue;
		else{
			vis[y]=1;
			dfs(y);
		}
	}
}

void dfs_ans(int x){
	vis[x]=1;
	for(register int i=head[x];i;i=e[i].nxt){
		int y=e[i].to;
		if(vis[y]) continue;
		vis[y]=1;
		if(sum[y]==0) dfs_ans(y);
		else{
			ans=ans^y;
			dfs_ans(y);
		}
	}
}

int main(){
	freopen("asm_game.in","r",stdin);
	freopen("asm_game.out","w",stdout);
	n=read(),m=read();
	int x,y;
	for(register int i=1;i<=m;i++){
		x=read(),y=read();
		add(x,y);
		add(y,x);
	}
	dfs(1);
	while(1){
		bool pd=1;
		for(register int i=1;i<=n;i++){
			if(sum[i]<3&&sum[i]!=0){
				sum[i]=0;
				for(register int k=head[i];k;k=e[k].nxt){
					int y=e[k].to;
					if(sum[y]==0) continue;
					else sum[y]--;
				}
				pd=0;
			}
		}
		if(pd==1) break;
	}
	memset(vis,0,sizeof(vis));
	for(register int i=1;i<=n;i++){
		if(sum[i]!=0){
			ans=i;
			dfs_ans(i);
			break;
		}
	}
	cout<<ans<<'\n';
	return 0;
}