hdu 4160(最小路径覆盖)
来源:互联网 发布:热血传奇闪避命中数据 编辑:程序博客网 时间:2024/05/19 02:18
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4160
思路:最小路径覆盖,如果满足条件:wi < wj , li < lj , and hi < hj,那么i->j连边,然后就是求最大匹配。
最小路径覆盖=顶点数-最大匹配。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 struct Node{ 7 int wi,hi,li; 8 }node[555]; 9 bool map[555][555];10 bool mark[555];11 int ly[555];12 int n;13 14 int cmp(const Node &p,const Node &q){15 if(p.wi!=q.wi)return p.wi<q.wi;16 else if(p.li!=q.li)return p.li<q.li;17 return p.hi<q.hi;18 }19 20 int dfs(int u)21 {22 for(int v=0;v<n;v++){23 if(map[u][v]&&!mark[v]){24 mark[v]=true;25 if(ly[v]==-1||dfs(ly[v])){26 ly[v]=u;27 return 1;28 }29 }30 }31 return 0;32 }33 34 int MaxMatch()35 {36 int res=0;37 memset(ly,-1,sizeof(ly));38 for(int i=0;i<n;i++){39 memset(mark,false,sizeof(mark));40 res+=dfs(i);41 }42 return res;43 }44 45 int main(){46 // freopen("1.txt","r",stdin);47 while(scanf("%d",&n),n){48 for(int i=0;i<n;i++){49 scanf("%d%d%d",&node[i].wi,&node[i].li,&node[i].hi);50 }51 sort(node,node+n,cmp);52 memset(map,false,sizeof(map));53 for(int i=0;i<n;i++){54 for(int j=i+1;j<n;j++){55 if(node[i].wi<node[j].wi&&node[i].li<node[j].li&&node[i].hi<node[j].hi)56 map[i][j]=true;57 }58 }59 int ans=MaxMatch();60 printf("%d\n",n-ans);61 }62 return 0;63 }
0 0
- hdu 4160(最小路径覆盖)
- 【最小路径覆盖】HDU 4160
- HDU - 4160 最小路径覆盖
- hdu 4160 二分图最小路径覆盖
- hdu 4160 Dolls (最小路径覆盖)
- HDU-4160 Doll 最小路径覆盖
- [hdu 4160] Dolls(最小路径覆盖)
- 【HDU】4160 Dolls 最小路径覆盖
- HDU 4160 Dolls(DAG最小路径覆盖)
- HDU 4160 Dolls 最小路径覆盖
- HDU 4160 — Dolls 最小路径覆盖
- HDU 4160 Dolls(DAG最小路径覆盖)
- HDU 4160 Dolls(DAG最小路径覆盖)
- HDU 1350(最小路径覆盖)
- hdu 3991(最小路径覆盖)
- hdu 3335 (最小路径覆盖)
- hdu 3335(最小路径覆盖)
- hdu 1151 最小路径覆盖
- hdu 1507(最大匹配)
- hdu 4185(最大匹配)
- hdu 2458(最大独立集)
- hdu 2647(拓扑排序)
- hdu 3342(拓扑排序)
- hdu 4160(最小路径覆盖)
- 银行家算法
- hdu 3038(带权并查集)
- 收藏的博客
- hdu 2120(并查集判环)
- 缺少libz.dylib库的时候引起的一个链接错误
- hdu 3938(离线的并查集)
- hdu 4126(prim+树形dp)
- hdu 2860(并查集应用)