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 |
狂wa。哪位给在下看一下?每一列选且只选一个白点,每一行最多选一个白点,是吗?#include <cstdio> #include <iostream> using namespace std; bool map[1005][1005]; int chk[1005]; int match[1005]; int result,m,n; int Dfs(int p) { int i,t; for(i=0;i<m;i++) if((map[i][p]==1) && (chk[i]==0)) { chk[i]=1; t=match[i]; match[i]=p; if((t==-1 )||( Dfs(t)==1)) return 1; match[i]=t; } return 0; } int pro() { int i,res=0; for(i=0;i<n;i++) { for(int j=0;j<m;j++) chk[j]=0; if(Dfs(i)==1) res++; } return res; } int main() { int c; scanf("%d",&c); while(c--) { scanf("%d%d",&m,&n); int i,j,k; for(i=0;i<m;i++) for(j=0;j<n;j++) map[i][j]=0; for(i=0;i<m;i++) match[i]=-1; for(i=0;i<n;i++) { int a,b; scanf("%d%d",&a,&b); map[a-1][i]=1; map[b-1][i]=1; } result=pro();//匈牙利匹配 int temp[1005]; for(i=0;i<n;i++) temp[i]=0; if(result==n) { int i; for(i=0;i<m;i++) { if(match[i]>=0) temp[match[i]]=i;//转换match到另一边 } for(i=0;i<n-1;i++) cout<<temp[i]+1<<" "; cout<<temp[n-1]+1<<endl; } else cout<<"NO"<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator