HDU 3861 The King’s Problem 强连通缩点+最小路径覆盖
来源:互联网 发布:复旦大数据学院夏令营 编辑:程序博客网 时间:2024/05/18 10:56
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=3861
题意
一个国家有n个城市,城市之间有m条单向道路。国王为了方便管理城市,决定给所有的城市分为一个州,会确保每个城市属于一个州。如果城市之间u,v之间能够相互到达,那么u,v必须分在同一个州,另外,一个州里的任意两个城市必须满足u能到v或者v能到u。求最小划分州数。
思路
tarjan缩点+二分图匹配。
最小路径覆盖=n-最大匹配。n为tarjan缩点后得到点数。这个n弄错WA了十多次。还有就是scc是全局变量,在没有调用solve前scc还没有被正确计算出来居然写出ans=scc-solve(n)( solve最后返回Hungarian() )这样的式子(╥╯^╰╥)
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<string>#include<queue>#include<stack>#include<set>#include<map>#define ll long longusing namespace std;const int INF = ( 2e9 ) + 2;const ll maxn = 5010;vector<int> g1[maxn],g2[maxn];int dfn[maxn],low[maxn],Belong[maxn],Stack[maxn];bool Instack[maxn],vis[maxn];int match[maxn];int index,top,scc;void tarjan(int u){ dfn[u]=low[u]=++index; Stack[top++]=u; Instack[u]=1; for(int i=0,L=g1[u].size();i<L;i++) { int v=g1[u][i]; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(Instack[v]) low[u]=min(low[u],low[v]); } if(dfn[u]==low[u]) { scc++;int x; do { x=Stack[--top]; Instack[x]=0; Belong[x]=scc; }while(x!=u); }}bool dfs(int u){ for(int i=0,L=g2[u].size();i<L;i++) { int v=g2[u][i]; if(!vis[v]) { vis[v]=1; if(match[v]==-1||dfs(match[v])) { match[v]=u; return true; } } } return false;}int Hungarian(){ int ret=0; memset(match,-1,sizeof(match)); for(int i=1;i<=scc;i++) { memset(vis,0,sizeof(vis)); if(dfs(i))ret++; } return ret;}int solve(int n){ memset(dfn,0,sizeof(dfn)); top=scc=index=0; for(int i=1;i<=n;i++) if(!dfn[i])tarjan(i); for(int i=1;i<=n;i++) { for(int j=0,L=g1[i].size();j<L;j++) { int v=g1[i][j]; if(Belong[i]!=Belong[v]) g2[Belong[i]].push_back(Belong[v]); } } return scc-Hungarian();}int main(){ int T; scanf("%d",&T); while(T--) { int n,m,u,v; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { g1[i].clear(); g2[i].clear(); } for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); g1[u].push_back(v); } printf("%d\n",solve(n)); }}
阅读全文
0 0
- 【HDU】3861 The King’s Problem 强连通缩点+有向图最小路径覆盖
- The King’s Problem (hdu 3861 强连通缩点+最小路径覆盖)
- HDU 3861 The King’s Problem(强连通缩点 + 最小路径覆盖)
- HDU 3861 The King’s Problem 强连通缩点+最小路径覆盖
- hdu3861 The King’s Problem (强连通缩点+最小路径覆盖)
- HDU 3861 The King’s Problem 强联通缩点 + 最小路径覆盖
- HDU --- 3861 The King’s Problem 【强联通缩点 + 最小路径覆盖】
- hdu 1269 The King’s Problem(强连通分量+缩点+最小路径覆盖)
- hdu 3864 强连通缩点+最小路径覆盖
- HDU3861-The King’s Problem(有向图强连通缩点+最小路径覆盖)
- HDU 3861 The King’s Problem (强连通分量缩点+二分图匹配最小路径覆盖)
- 【强连通缩点+二分匹配】 HDOJ 3861 The King’s Problem
- HDU 3861 The King’s Problem 强连通+最小路径覆盖
- hdu 3861 The King’s Problem (强连通+最小路径覆盖)
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
- HDU - 3861 The King’s Problem(强连通分量+最小路径覆盖)
- HDU 3861The King’s Problem 强连通分量分解 + 二分图最小路径覆盖
- hdu 3861 The King’s Problem【强连通Kosaraju+最小路径覆盖】
- 实现Form表单提交页面不进行跳转
- WebSocket In ASP.NET Core
- 17090701_CentOS7(64)下MySQL卸载、安装与配置
- C#中的两把双刃剑:抽象类和接口
- ASP.NET Core依赖注入解读&使用Autofac替代实现
- HDU 3861 The King’s Problem 强连通缩点+最小路径覆盖
- 关于html中js引入位置相关
- HTML 分组元素
- 正则表达式全部符号解释
- html2canvas截图如何解决图片跨域的问题?
- 北京毕加索公司应邀参加2017第二届建筑VR和BIM核心技术行业峰会
- 启用本地https域名,在Mac OS X的apache里
- Spring配置文件获取系统的环境变量
- 编译原理题解