Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 614 | Accepted: 286 |
Description
Input
Output
Sample Input
4 1 2 -1 2 3 4 -1 2 -1 4 -1
Sample Output
1 2 3
Source
#include<stdio.h> #include<string.h> int a[270][270],ans[270],n; void swap(int *a,int *b) { int cnt=0,c[270],i; for(cnt=1;cnt<=n+1;++cnt) { c[cnt]=*a; *a++=*(b+cnt-1); } for(i=1;i<=n+1;++i) *b++=c[i]; } void XOR(int col,int *a,int *b) { int i; for(i=col;i<=n+1;++i) *b++^=*a++; } void init() { int col=0,x,i; for(i=1;i<=n;++i) a[i][n+1]=1; for(col=1;col<=n;++col) while(~scanf("%d",&x)&&x!=-1) a[x][col]=1; } void solved() { int col,row,node; for(col=1;col<=n;++col) { node=0; for(row=col;row<=n;++row) { if(a[row][col]) { node=row; break; } } if(node) swap(a[node]+1,a[col]+1); for(row=col+1;row<=n;++row) if(a[row][col]) XOR(col,a[col]+col,a[row]+col); } } void target() { int i,j; for(i=n;i>=1;--i) { ans[i]=a[i][n+1]; for(j=n-1;j>=1;--j) a[j][n+1]^=(ans[i] & a[j][i]); } int first=1; for(i=1;i<=n;++i) if(ans[i]) printf("%d ",i); printf("\n"); } int main() { int t,x,col=0; scanf("%d",&n); init(); solved(); target(); return 0; }
[高斯消元] POJ 2345 Central heating
原文:http://www.cnblogs.com/fuermowei-sw/p/6249979.html