比赛 20110412pm 评测结果 AAAWAAAWAAAAAAAAA
题目名称 牛棚的灯 最终得分 88
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-04-12 15:16:18
显示代码纯文本
#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN=50;

int N,M;
int A[MAXN][MAXN],B[MAXN];

inline void swaparr(int i,int j)
{
	for(int k=0;k<N;k++)
		swap(A[i][k],A[j][k]);
	swap(B[i],B[j]);
}

int main()
{
	freopen("lights.in","r",stdin);
	freopen("lights.out","w",stdout);
	scanf("%d%d",&N,&M);
	for(int i=0;i<M;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		a--,b--;
		A[a][b]=A[b][a]=1;
	}
	for(int i=0;i<N;i++)
		A[i][i]=1,B[i]=1;
	for(int i=0;i<N;i++)
	{
		if (A[i][i]!=1)
			for(int j=i+1;j<N;j++)
				if (A[j][i]==1)
				{
					swaparr(i,j);
					break;
				}
		if (A[i][i]!=-1)
		for(int j=i+1;j<N;j++)
			if (A[j][i]==1)
			{
				for(int k=0;k<N;k++)
					A[j][k]^=A[i][k];
				B[j]^=B[i];
			}
	}
	int re=0;
	for(int i=N-1;i>=0;i--)
	{
		if (A[i][i]==1)
		{
			if (B[i]==1)
				re++;
			for(int j=0;j<i;j++)
				if (A[j][i]==1)
				{
					for(int k=0;k<N;k++)
						A[j][k]^=A[i][k];
					B[j]^=B[i];
				}
		}
	}
	printf("%d\n",re);
	return 0;
}