hdu 4160 dolls 最少路径覆盖
2012-02-28 10:56
387 查看
最少路径覆盖 == n - 最大匹配
#include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<cstring> #include<string> #include<iomanip> #include<cassert> using namespace std; const int maxn = 1011; const int add = 500; struct zz { int x; int y; int z; }zx[maxn]; vector<int>g[maxn]; int link[maxn]; int use[maxn]; int n; bool dfs(int now) { int to; for(int i=0;i<g[now].size();i++) { to = g[now][i]; if( !use[to] ) { use[to] = true; if(link[to] == -1 || dfs(link[to]) ) { link[to] = now; return true; } } } return false; } int matching() { int ans = 0; memset(link,-1,sizeof(link)); memset(use,false,sizeof(use)); for(int i=1;i<=n;i++) { memset(use,false,sizeof(use)); if(dfs(i)) { ans++; } } return ans; } bool can(int i,int j) { if(zx[i].x < zx[j].x && zx[i].y < zx[j].y && zx[i].z < zx[j].z ) { return true; } return false; } int main() { while(cin>>n) { if(n==0) { break; } for(int i=1;i<maxn;i++) { g[i].clear(); } for(int i=1;i<=n;i++) { cin>>zx[i].x>>zx[i].y>>zx[i].z; } int from; int to; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(can(i,j)) { from = i; to = j + add; g[from].push_back(to); g[to].push_back(from); } } } cout<< n - matching()<<endl; } return 0; }
相关文章推荐
- 【HDU】4160 Dolls 最小路径覆盖
- hdu 4160 Dolls 二分图最小路径覆盖
- HDU 4160 Dolls(DAG最小路径覆盖)
- hdu 4160 Dolls【最小路径覆盖----二分匹配】
- HDU 4160 Dolls(DAG最小路径覆盖)
- [hdu 4160] Dolls(最小路径覆盖)
- HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)
- HDU 4160 — Dolls 最小路径覆盖
- hdu 4160 (Dolls)二分图的最小路径覆盖
- HDU 4160 Dolls 最小路径覆盖
- HDU 4160 Dolls(DAG最小路径覆盖)
- HDU 4160 Dolls(二分图匹配+匈牙利算法+最小路径覆盖)
- HDU 4160 Dolls 【最小路径覆盖】
- 最小路径覆盖&&http://acm.hdu.edu.cn/showproblem.php?pid=4160
- hdu 1151 Air Raid 最少路径覆盖
- (hdu step 6.3.3)Air Raid(最小路径覆盖:求用最少边把全部的顶点都覆盖)
- hdu 4160 Dolls--最小点集覆盖=V-二分图最大匹配
- 【最小路径覆盖】HDU 4160
- HDU - 4160 最小路径覆盖
- hdu 4160 二分图最小路径覆盖