比赛 |
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;
}