标签:range logs mat panel acm mit 大学生 color 竞赛
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
#include<bits/stdc++.h> using namespace std; #define ll long long #define pi (4*atan(1.0)) #define eps 1e-14 #define bug(x) cout<<"bug"<<x<<" "<<endl; const int N=1e2+10,M=1e6+10,inf=2e9+10,mod=1e9+7; const ll INF=1e18+10; int n,m,q; int a[N][N]; int mp[N][N]; int linker[N]; bool used[N]; bool dfs(int a) { for(int i=0;i<n;i++) if(mp[a][i]&&!used[i]) { used[i]=true; if(linker[i]==-1||dfs(linker[i])) { linker[i]=a; return true; } } return false; } int hungary() { int result=0; memset(linker,-1,sizeof(linker)); for(int i=0;i<n;i++) { memset(used,0,sizeof(used)); if(dfs(i)) result++; } return result; } int slove(int f,int x) { int cnt=0; memset(mp,0,sizeof(mp)); for(int i=1;i<=f;i++) { for(int j=1;j<=f;j++) { if(a[i][j]==x) { cnt++; mp[i-1][j-1]=1; } } } if(cnt<=q)return 1; int kill=hungary(); if(kill<=q)return 1; return 0; } int flag[100]; vector<int>ans; int main() { while(~scanf("%d%d",&n,&q)) { if(n==0&&q==0)break; ans.clear(); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); } for(int i=1;i<=50;i++) { if(!slove(n,i)) ans.push_back(i); } if(ans.size()==0) printf("-1\n"); else { printf("%d",ans[0]); for(int i=1;i<ans.size();i++) printf(" %d",ans[i]); printf("\n"); } } return 0; }
hdu 1498 50 years, 50 colors 最小点覆盖
标签:range logs mat panel acm mit 大学生 color 竞赛
原文地址:http://www.cnblogs.com/jhz033/p/6412940.html