hdu 4160 二分图最小路径覆盖
2012-12-10 17:06
435 查看
最小路径覆盖=点数—最大匹配;
可以理解为如果匹配为0,则路径=点数。
每增加一次匹配则点数减1,,所以最小路径覆盖=点数—最大匹配;
可以理解为如果匹配为0,则路径=点数。
每增加一次匹配则点数减1,,所以最小路径覆盖=点数—最大匹配;
#include<stdio.h> #include<string.h> int m,n,u,use[503],st[503][503],link[503]; struct ss { int c,k,g; }s[503]; int find(int v) { int i,j; for(i=1;i<=m;i++) { if(st[v][i]&&!use[i]) { use[i]=1; if(!link[i]||find(link[i])) { link[i]=v; return 1; } } } return 0; } int max() { int i,ans=0; memset(link,0,sizeof(link)); for(i=1;i<=m;i++) { memset(use,0,sizeof(use)); if(find(i)) ans++; } return ans; } int main() { while(~scanf("%d",&u)&&u) { int i,j,x,y,z; m=0; memset(st,0,sizeof(st)); for(i=1;i<=u;i++) { m++; scanf("%d%d%d",&x,&y,&z); s[m].c=x; s[m].k=y; s[m].g=z; } for(i=1;i<=u;i++) for(j=i+1;j<=u;j++) { if(s[i].c<s[j].c&&s[i].k<s[j].k&&s[i].g<s[j].g) st[i][j]=1; if(s[i].c>s[j].c&&s[i].k>s[j].k&&s[i].g>s[j].g) st[j][i]=1; } int zs; zs=max(); printf("%d\n",u-zs); } return 0; }
相关文章推荐
- hdu 4160 (Dolls)二分图的最小路径覆盖
- hdu 4160 Dolls 二分图最小路径覆盖
- HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)
- hdu 1151 二分图最小路径覆盖
- [hdu 4160] Dolls(最小路径覆盖)
- hdu 4160 Dolls【最小路径覆盖----二分匹配】
- HDU 3861 The King’s Problem 强连通分量分解 + 二分图最小路径覆盖
- HDU 1151 二分图的DAG最小路径覆盖 解题报告
- HDU 4160 二分图最小点覆盖
- 最小路径覆盖&&http://acm.hdu.edu.cn/showproblem.php?pid=4160
- HDU 4160 Dolls 【最小路径覆盖】
- HDU 4160 Dolls(DAG最小路径覆盖)
- HDU 4160 Dolls 最小路径覆盖
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
- hdu 4160(最小路径覆盖)
- HDU 4160 Dolls(DAG最小路径覆盖)
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
- hdu 1350 Taxi Cab Scheme(二分图最小路径覆盖)
- hdu 4160(最小路径覆盖)
- 【HDU】4160 Dolls 最小路径覆盖