| 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