50 years, 50 colors HDU
Posted bxd123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了50 years, 50 colors HDU相关的知识,希望对你有一定的参考价值。
和棋盘游戏一个类型的题目
矩阵转换为二分图最大匹配问题 每次碰撞气球都是一行或一列
#include<bits/stdc++.h> using namespace std; #define MAXI 105 int mp[MAXI][MAXI]; int used[MAXI]; int vis[MAXI]; int n,m; int color[51]; bool dfs(int x,int color) { for(int j=1;j<=n;j++) { if(mp[x][j]==color&&!used[j]) { used[j]=1; if(!vis[j]||dfs(vis[j],color)) { vis[j]=x; return true; } } } return false; } int find1(int x) { int ans=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { memset(used,0,sizeof(used)); if(dfs(i,x))ans++; } return ans; } int main() { int k; while(scanf("%d%d",&n,&k)==2&&(n||k)) { int ans[MAXI]; memset(color,0,sizeof(color)); memset(ans,0,sizeof(ans)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&mp[i][j]); color[mp[i][j]]=1; } int n=0; for(int i=1;i<=50;i++) { if(color[i]) { if(k<find1(i)) ans[n++]=i; } } sort(ans,ans+n); if(n==0)printf("-1 "); else { for(int i=0;i<n-1;i++) printf("%d ",ans[i]); printf("%d ",ans[n-1]); } } return 0; }
以上是关于50 years, 50 colors HDU的主要内容,如果未能解决你的问题,请参考以下文章