hdu 1498
来源:互联网 发布:淘宝卖家寄寿衣怎么办 编辑:程序博客网 时间:2024/06/01 19:43
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 200int mark[N],map[N][N],link[N],n,hash[N],b[N],color[N];int find(int k,int u){int i;for(i=1;i<=n;i++){if(!mark[i]&&map[k][i]==u){mark[i]=1;if(!link[i]||find(link[i],u)){link[i]=k;return 1;}}}return 0;}int main(){int m,i,j,k,count,sum;while(scanf("%d%d",&n,&m),n||m){k=0;memset(hash,0,sizeof(hash));memset(color,0,sizeof(color));for(i=1;i<=n;i++)for(j=1;j<=n;j++){scanf("%d",&map[i][j]);if(!hash[map[i][j]]){color[k++]=map[i][j];hash[map[i][j]]=1;}}count=0;for(i=0;i<k;i++){memset(link,0,sizeof(link));sum=0;for(j=1;j<=n;j++){memset(mark,0,sizeof(mark));sum+=find(j,color[i]);}if(sum>m)b[count++]=color[i];}if(count==0)printf("-1\n");else{sort(b,b+count);for(i=0;i<count-1;i++)printf("%d ",b[i]);printf("%d\n",b[count-1]);}}return 0;}大家可以先做一下hdu 2119,每次只能删除一行或一列的1,求的是最少多少次能把1删除完,以行为一个子集,列为一个子集,如果map[i][j]=1就是i与j建一条边,把1删除完,就是每条边都要被删除,就是最小点覆盖问题,这一题也是每次只能消除一行或一列的相同颜色的气球,要求出删除每一种颜色的气球最少需要多少次,如果大于k的话就不能删除完,要求的就是不能被删除完的。每一种气球就相当于hdu 2119的1,也是求最小点覆盖。
0 0
- hdu 1498
- hdu 1498
- HDU 1498
- hdu 1498
- hdu 1498 匈牙利算法
- hdu 1498 匈牙利算法
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- sqlite3 表里插入系统时间(时间戳)
- hdu 1150
- Data Types in the Kernel <LDD3 学习笔记>
- uva 10461 Difference
- 为Hero穿衣服
- hdu 1498
- C/C++高精度计时器类
- hdu1698Just a Hook segment_tree
- hdu 2119
- poj 3041
- HDU 1908 Double Queue(set)
- JQuery时间格式化插件--扩展JQuery
- ny 436 sum of all integer numbers
- 我的技术博客开通了