算法课程笔记——高斯消元












先乘后除,精度

#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++){
        
     }
 }