hdu 149850 years, 50 colors
来源:互联网 发布:网络语al是什么意思 编辑:程序博客网 时间:2024/05/22 07:49
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1498
/* 题意: 给你一个n*n的矩阵,在矩阵中分布着s种颜色的气球,给你k次扎破气球 的操作,每次操作可以扎破一行,或一列的同一颜色的气球。问在k次操 作后有那几种颜色的气球是不能被完全扎破的. 解题思路: 使用二部图最大匹配,寻找每种颜色的最大匹配数,(行,列分别为两个匹配) 如果都在m次内可以被刺破,则输出 -1 否则的话,按不能被刺破的气球 编号从小到大进行输出。*/#include<stdio.h>#include<string.h>#include<algorithm>#define maxn 101int map[maxn][maxn],n,m,color[maxn],vis[maxn],mark[maxn],cb[maxn];bool dfs(int k,int v){for(int i = 1; i <= n; i++){if(map[i][v] != k || vis[i])continue;vis[i] = 1;if(!mark[i] || dfs(k,mark[i])){mark[i] = v;return true;}}return false;}int cmp(const void *a ,const void *b){return (int *)a - (int *)b;}int main(){int i,j,ans,num,color_num;while(~scanf("%d%d",&n,&m) && (n||m)){for(i = 1; i <= n; i++){for(j = 1; j <= n; j++){scanf("%d",&map[i][j]);}}num = 0;for(i = 1; i <= 50; i++){ans = 0;memset(mark,0,sizeof(mark));for(j = 1; j <= n; j++){memset(vis,0,sizeof(vis));if(dfs(i,j))ans++;}if(ans > m)cb[num++] = i;}if(num == 0)printf("-1\n");else{qsort(cb,num,sizeof(int),cmp);for(i = 0; i < num - 1; i++)printf("%d ",cb[i]);printf("%d\n",cb[i]);}}return 0;}
- hdu 149850 years, 50 colors
- 50 years, 50 colors HDU
- hdu 1498 50 years, 50 colors
- hdu 1498 50 years, 50 colors
- HDU 1498 50 years, 50 colors
- HDU 1498 50 years, 50 colors
- HDU 1498 50 years, 50 colors
- hdu 1498 50 years, 50 colors
- HDU 1498 — 50 years, 50 colors
- HDU 1498 50 years, 50 colors
- hdu acm 1498 50 years, 50 colors
- HDU 1498 50 years, 50 colors
- HDU 1498 50 years, 50 colors
- 50 years, 50 colors
- 50 years, 50 colors
- hdu 1498 50 years, 50 colors (二分匹配)
- hdu-1498-50 years,50 colors(最大匹配,行列建图法)
- hdu 1498 50 years, 50 colors(二分图匹配)
- C++程序设计实验报告(二)
- 免费实用微软系统工具集推荐
- Notepad++搭建Python开发环境的一个小改进
- SQLServer存储过程收集总结
- 关于亮度,对比度以及色度调节
- hdu 149850 years, 50 colors
- Google地图之野望:你所不知道的背后故事
- The Zen of Python
- XSLT简单教程--XSLT的实例
- JavaScript 防止重复提交
- java 页面url传值中文编码&解码
- java多线程同步设计wait/notify机制
- 世界第一足球宝贝动态壁纸”原来是控制短信功能的木马!
- 简单工厂模式