#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,gau[40][40],ans[40],sum;
int main() {
memset(gau,0,sizeof(gau));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) {
gau[i][i]=gau[i][n+1]=1;
}
for(int i=1;i<=m;i++) {
scanf("%d%d",&a,&b);
gau[a][b]=gau[b][a]=1;
}
for(int i=1;i<=n;i++) {
int p;
for(p=i;p<=n;p++) {
if(gau[p][i]) break;
}
if(p==n+1) continue;
swap(gau[p],gau[i]);
for(int j=i+1;j<=n;j++) {
if(gau[j][i]) {
for(int k=i;k<=n+1;k++) {
gau[j][k]^=gau[i][k];
}
}
}
}
// //========================[
// for(int i=1;i<=n;i++) {
// for(int j=1;j<=n+1;j++) {
// printf("%d ",gau[i][j]);
// }
// printf("\n");
// }
// printf("\n\n\n");
// //========================]
for(int i=n;i>0;i--) {
ans[i]=gau[i][n+1];
for(int j=n;j>i;j--) {
ans[i]^=gau[i][j]&ans[j];
}
sum+=ans[i];
}
// for(int i=1;i<=n;i++) {
// printf("%d",ans[i]);
// }
printf("%d\n",sum);
}
(88分,无法解决多解情况)
洛谷 P2962 高斯消元解异或方程
最新推荐文章于 2022-10-03 23:28:25 发布