首页 > 其他 > 详细

HDOJ1151有向图最小路径覆盖

时间:2015-08-26 19:26:21      阅读:187      评论:0      收藏:0      [点我收藏+]

//有向图最小路径覆盖:从某一点出发沿着有向路径,不走回路,能将所有的结点遍历。


#include<iostream> #include<cstdio> #include<vector> #include<set> using namespace std; const int MAX_N=125; int match[MAX_N]; bool vis[MAX_N]; set<int> insert; vector<int> e[MAX_N]; int n,k; void Init() { scanf("%d %d",&n,&k); memset(match, -1, sizeof(match)); insert.clear(); for(int i=0; i<MAX_N; i++) { e[i].clear(); } int a, b; for(int i=0; i<k; i++) { scanf("%d %d", &a, &b); insert.insert(a); e[a].push_back(b); } } bool Dfs(int x) { for(int i=0; i<e[x].size(); i++) { int u=e[x][i]; if(!vis[u]) { vis[u]=1; if(match[u]==-1||Dfs(match[u])) { match[u]=x; return true; } } } return false; } int Bi_matching() { int ans=0; set<int>::iterator it; for(it=insert.begin(); it!=insert.end(); it++) { int i=(*it); memset(vis, false, sizeof(vis)); if(Dfs(i)) ans++; } return ans; } int main() { int t; scanf("%d",&t); while(t--) { Init(); printf("%d\n",n-Bi_matching());//最小路径覆盖=结点数-最小点集覆盖 } return 0; }


 

 

HDOJ1151有向图最小路径覆盖

原文:http://www.cnblogs.com/program-ccc/p/4761169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!