算法课程笔记——高斯消元
先乘后除,精度
#include<bist/stdc++.h>usingnamespacestd;
#definemaxn 2800intn,m,x,ans;
bitset<N>a[N];
voidgauss(){
intcnt=0;
for(inti=1;i<=n;i++){
intmaxx=cnt+1;
for(intj=i+1;j<=n;j++){
if(a[j][i]>a[maxx][i])maxx=j;
}
swap(a[cnt+1],a[maxx]);
if(!a[i][i])continue;
cnt++;
for(intj=1;j<=n;j++){
if(a[j][i]==1&&i!=j)a[j]=a[j]^a[i];
}
}
if(cnt<n){
for(inti=1;i<=n;i++){
if(!a[i][i]&&a[i][n+1])printf("no solution\n"));
}
}
return;
}
intmain(){
scanf("%d",&n);
for(inti=1;i<=n;i++){
scanf("%d",&m);
if(m&1)a[i][n+1]=1,a[i][i]=1;
elsea[i][n+1]=0,a[i][i]=0;
while(m--){
scanf("%d",&x);a[i][x]=1;
}
}
gauss();
for(inti=1;i<=n;i++){
}
}