比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 AAAAAAAAAA
题目名称 Asm.Def的游戏 最终得分 100
用户昵称 高哥 运行时间 0.157 s
代码语言 C++ 内存使用 1.93 MiB
提交时间 2015-10-31 09:44:00
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define N 100010
#define M 500050
using namespace std;
int n,m,d[N],ans=0;
bool vis[N];  //记录是否被删除 
struct Edge{
	int from,to;
};
vector<Edge> edges;
vector<int> g[N];
queue<int> que;
void add(int u,int v)
{
	edges.push_back((Edge){u,v});
	int m=edges.size();
	g[u].push_back(m-1);
}
void init()
{
	memset(d,0,sizeof(d));
	edges.clear();
	memset(vis,false,sizeof(vis));

}
void input()
{
	scanf("%d%d",&n,&m);
	int u,v;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&u,&v);
		d[u]++;
		d[v]++;
		add(u,v);
		add(v,u);
	}
}
void bfs()
{
	while(!que.empty())
	{
		int u=que.front();
		que.pop();
		for(int i=0;i<g[u].size();i++)
		{
			Edge e=edges[g[u][i]];
			d[e.to]--;
			if(d[e.to]<3 && !vis[e.to])
			{
				que.push(e.to);
				//cout<<e.to<<endl;
				ans^=e.to;
				vis[e.to]=true;
			}
		}
	}
}
int main()
{
	freopen("asm_game.in","r",stdin);
	freopen("asm_game.out","w",stdout);
	init();
	input();
	for(int i=1;i<=n;i++)
	  ans^=i;
	//for(int i=1;i<=n;i++)  cout<<d[i]<<endl;
	for(int i=1;i<=n;i++)
	{
		if(d[i]<3 && !vis[i])
		{
		  que.push(i);
		  ans^=i;
		  vis[i]=true;
		  bfs();
		}
	}

	printf("%d\n",ans);
	return 0;
}

/*
7 12
1 2
1 3
1 4
2 4
3 4
5 2
5 3
5 6
6 2
3 7
1 7
4 7

*/