Advertising:
#include <stdio.h>int main(){ puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44356273");}
Exercises
Referring to this problem, I also wrote the two questions.
"POJ1681" Painter ' s problem Gaussian elimination to find the minimum ∑ coefficients of the XOR equations
Code:
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N#define INF 0x3f3f3f3fusing namespace STD;BOOLA[n][n],x[n];intCrs[n],n,ans;voidDfsintIdintWhich,intNow) {if(id<1) {ans=min (Ans,now);return; }if(Now>=ans)return;if(Crs[id]==which) {BOOLret=a[id][n+1]; for(inti=which+1; i<=n;i++) ret^= (A[id][i]*x[i]); X[which]=ret; DFS (id-1, which-1, Now+ret); }Else{x[which]=true; DFS (id,which-1, now+1); x[which]=false; DFS (id,which-1, now); }return;}intGauss (intNintm) {intI,j,k,id; for(id=i=1; i<n;i++,id++) { for(j=id;j<=m&&!a[j][i];j++);if(j>m) {id--;Continue;} Crs[id]=i;if(ID!=J) for(k=i;k<=n;k++) Swap (a[id][k],a[j][k]); for(j=id+1; j<=m;j++)if(A[j][i]) for(k=i;k<=n;k++) a[j][k]^=a[id][k]; } for(i=id;i<=m;i++)if(A[i][n])return-1;returnid-1;}intid[n][n],cnt;CharSrc[n];voidInit () {cnt=0, Ans=inf;memsetA0,sizeofa);memset(X,0,sizeofx);memset(ID,0,sizeofID);memset(CRS,0,sizeofCRS);}intMain () {Freopen ("Test.in","R", stdin);intI,j,k;intX,y,t; while(scanf("%d", &n), n) {init (); for(i=1; i<n;i++) {scanf("%d%d", &x,&y); a[x][y]=a[y][x]=1; } for(i=1; i<=n;i++) a[i][i]=a[i][n+1]=1; T=gauss (n+1, n);if(t==-1)puts("INF");Else{DFS (T,n,0);printf("%d\n", ans); } }return 0;}
"BZOJ2466" "Zhongshan 2009" tree Gaussian elimination or equations