几道二分匹配
2012-07-18 18:25
155 查看
额,累死了,,快十天了没更新博客啦,这些天一直在做二分匹配,截止到刚才终于把hdu Index By Type里面的match做完啦。。好吧,一题一题开始说。
http://acm.hdu.edu.cn/showproblem.php?pid=2236
无题II
一般遇到使最大最小差值最小的问题,要想到二分答案,然后枚举下限,对于每一种情况判断是否可行。
因为每行没列都选一个,所以用到二分匹配,行在A中,列在B中,这样每一个数都代表从A到B的一条边。
然后判断在这样的一种情况下,能否找得到一组完备匹配。
View Code
http://acm.hdu.edu.cn/showproblem.php?pid=2413
1 1
0 40000 40000 39999
40000
结果应该是1600040000。
难道是我水过了????
http://acm.hdu.edu.cn/showproblem.php?pid=2236
无题II
一般遇到使最大最小差值最小的问题,要想到二分答案,然后枚举下限,对于每一种情况判断是否可行。
因为每行没列都选一个,所以用到二分匹配,行在A中,列在B中,这样每一个数都代表从A到B的一条边。
然后判断在这样的一种情况下,能否找得到一组完备匹配。
View Code
# include<stdio.h> # include<string.h> # include<stdlib.h> # define N 1005 # define M 505 int n,m,mid; int used[M] ,Num[M]; bool vis[M],map [M]; bool getnum(int u) { int j,v; for(j=0;j<m;j++) { v=j; if(!map[u][v]) continue; if(vis[v]) continue; vis[v]=1; if(Num[v]<mid) { Num[v]++; used[v][Num[v]]=u; return 1; } for(j=1;j<=Num[v];j++) { if(getnum(used[v][j])) { used[v][j]=u; return 1; } } } return 0; } int main() { int i,j; int flag,num,ans; int l,r; char str[20000]; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0 && m==0) break; memset(map,0,sizeof(map)); for(i=0;i<n;i++) { scanf("%s",str); gets(str); flag=0; for(j=0;str[j];j++) { if(str[j]>='0' && str[j]<='9' && flag==0) { num=str[j]-'0'; flag=1; } else if(str[j]>='0' && str[j]<='9') { num*=10; num+=str[j]-'0'; } else if(str[j]==' ') { if(flag==1) map[i][num]=1; flag=0; } } if(flag==1) map[i][num]=1; } l=n/m; if(l*m!=n) l++; r=n; while(l<=r) { mid=(l+r)/2; memset(Num,0,sizeof(Num)); for(i=0;i<n;i++) { memset(vis,0,sizeof(vis)); if(!getnum(i)) break; } if(i==n) {ans=mid;r=mid-1;} else l=mid+1; } printf("%d\n",ans); } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=2413
Against Mammoths
我也是用二分答案做的,但是有一组例子都跑不出来。。。1 1
0 40000 40000 39999
40000
结果应该是1600040000。
难道是我水过了????
相关文章推荐
- 二分匹配详解
- hdu2458 二分匹配
- poj 1469 二分匹配——匈牙利算法
- 二分匹配 4579: 多米诺骨牌II(中石油)
- POJ 3057 Evacuation(二分匹配)
- CSU1552: Friends(快速判断大数是不是素数+二分匹配)
- 素数伴侣--最大二分匹配
- POJ 1469(裸二分匹配)
- hdu 4185 Oil Skimming 二分匹配
- poj3057 bfs+二分匹配
- hdu 5093 Battle ships(二分匹配)
- 最大二分匹配问题
- hdu2236 无题II (二分+最大匹配)
- 二分匹配专辑
- hdu 1068 Girls and Boys(二分匹配)
- poj 2226 最大流二分匹配
- 一道hdu 2063彻底搞懂二分匹配--匈牙利算法
- 理解匈牙利算法求二分匹配
- 解题报告-HDOJ-2063(最大二分匹配-匈牙利算法)
- poj 3686 The Windy's 二分匹配 KM算法求最小权匹配