Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:1A纪念In Reply To:1A纪念 Posted by:909475573 at 2013-05-31 23:00:36 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cstdlib> #include<queue> using namespace std; bool g[110][110]; int n,cont; bool f[110][210],h[110][210]; bool d[110]; short v[110],w[110][2][110]; int a[110],b[110],x,y; bool divide(int st) { queue<int> q; int s,d,i;x=y=0; q.push(st); v[st]=1;x++;w[cont][1][x]=st; while(q.size()) { s=q.front(); q.pop(); for(i=1;i<=n;i++) { if(g[s][i]) { if(v[i]==-1) { v[i]=!v[s]; if(v[i]) x++,w[cont][1][x]=i; else y++,w[cont][0][y]=i; q.push(i); } else if(v[i]==v[s]) return 0; } } } return 1; } void dfs(int num,int st) { //cout<<num<<'-'<<st<<endl; if(num==0) { printf("%d ",cont); return; } if(h[num][st]) { cont+=a[num]; dfs(num-1,st-a[num]+b[num]); for(int i=1;i<=a[num];i++) { printf("%d ",w[num][1][i]); v[w[num][1][i]]=1; } } else { cont+=b[num]; dfs(num-1,st+a[num]-b[num]); for(int i=1;i<=b[num];i++) { printf("%d ",w[num][0][i]); v[w[num][0][i]]=1; } } } int main() { cin>>n; memset(v,-1,sizeof(v)); int i,j,k; for(i=1;i<=n;i++) { memset(d,0,sizeof(d)); while(scanf("%d",&j)&&j!=0) { d[j]=1; } for(j=1;j<=n;j++) { if(j!=i&&!d[j]) g[i][j]=g[j][i]=1; } } for(i=1;i<=n;i++) { if(v[i]==-1) { cont++; if(divide(i))a[cont]=x,b[cont]=y; else { printf("No solution"); return 0; } } } f[0][105]=1; for(i=0;i<cont;i++) { for(j=0;j<=209;j++) { if(f[i][j]) f[i+1][j+a[i+1]-b[i+1]]=f[i+1][j-a[i+1]+b[i+1]]=1,h[i+1][j+a[i+1]-b[i+1]]=1,h[i+1][j-a[i+1]+b[i+1]]=0; } } memset(v,0,sizeof(v)); for(i=105;i>=0;i--) { if(f[cont][i]) {j=cont; cont=0; dfs(j,i); printf("\n"); break; } } printf("%d ",n-cont); for(i=1;i<=n;i++) { if(!v[i]) printf("%d ",i); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator