HDU 3861 The King’s Problem(tarjan+二分图匹配)
来源:互联网 发布:李靓蕾 知乎 编辑:程序博客网 时间:2024/06/09 22:58
思路:首先同属一个州就证明两个城市是强连通的,又要使得对于每一个州里的任何两个城市u、v,都有不经过其他州的路从u到v或从v到u,其实就是一个二分图
#include<bits/stdc++.h>using namespace std;const int maxn = 5000+50;int in0[maxn],out0[maxn];vector<int>e[maxn];int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;stack<int>s;struct Max_Match{int n;vector<int>g[maxn];bool vis[maxn];int left[maxn];void init(int n){this->n=n;for(int i = 0;i<=n;i++)g[i].clear();memset(left,-1,sizeof(left));}bool match(int u){for(int i = 0;i<g[u].size();i++){int v = g[u][i];if(!vis[v]){vis[v]=1;if(left[v]==-1 || match(left[v])){left[v]=u;return 1;}}}return false;}int solve(){int ans = 0;for(int i = 1;i<=n;i++){memset(vis,0,sizeof(vis));if(match(i))ans++;}return ans;}}M;void dfs(int u){pre[u]=lowlink[u]=++dfs_clock;s.push(u);for(int i = 0;i<e[u].size();i++){int v = e[u][i];if(!pre[v]){dfs(v);lowlink[u]=min(lowlink[u],lowlink[v]);}else if (!sccno[v]) lowlink[u]=min(lowlink[u],pre[v]);}if(lowlink[u]==pre[u]){scc_cnt++;for(;;){int x = s.top();s.pop();sccno[x]=scc_cnt;if(x==u)break;}}}void find_scc(int n){dfs_clock = scc_cnt = 0;memset(sccno,0,sizeof(sccno));memset(pre,0,sizeof(pre));for(int i = 1;i<=n;i++)if(!pre[i])dfs(i);}int main(){ int n,m,T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i = 0;i<=n;i++)e[i].clear();for(int i = 0;i<m;i++){int u,v;scanf("%d%d",&u,&v);e[u].push_back(v);//M.g[u].push_back(v);}find_scc(n);M.init(n);for(int u = 1;u<=n;u++)for(int i = 0;i<e[u].size();i++){int v = e[u][i];if(sccno[u]!=sccno[v])M.g[sccno[u]].push_back(sccno[v]);}printf("%d\n",scc_cnt-M.solve());}}
0 0
- hdu 3861 The King’s Problem (tarjan 算法+二分图最大匹配)
- HDU 3861 The King’s Problem(tarjan+二分图匹配)
- [HDU3861]The King's Problem(Tarjan缩点+二分图匹配)
- [HDU3861]The King's Problem(Tarjan缩点+二分图匹配)
- 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 3861 The King’s Problem 连通分量+二分匹配
- HDU 3861 The King’s Problem 强连通分量+二分匹配(难)
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
- HDU 3861 The King’s Problem (强连通分量缩点+二分图匹配最小路径覆盖)
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
- 【hdu 3861】The King’s Problem(Tarjan缩点+匈牙利算法)
- HDU 3861 The King’s Problem(tarjan缩点+最小路径覆盖ISAP)
- HDU3861 The King’s Problem Tarjan缩点+二分图求最小路径覆盖
- HDU 3861The King’s Problem 强连通分量分解 + 二分图最小路径覆盖
- hdu 3861 The King’s Problem tarjan+缩点+最小路径覆盖
- maven的安装配置和与eclipse集成
- 获得控件高度
- Android开发之浅谈垃圾回收机制GC以及如何用好GC
- Zookeeper-Zookeeper可以干什么
- 前端的小玩意(9.2)——做一个仿360工具箱的web页面(全部工具里面的模板)
- HDU 3861 The King’s Problem(tarjan+二分图匹配)
- android图片加载框架比较----Glide,Picasso,Fresco
- HDU 4442 排队贪心
- 模拟实现智能指针
- 观察者模式与依赖反转原则
- iOS 开发中实现国际化语言切换
- Java并发编程-Callable和Future
- isNotEmpty :isNotBlank
- 浅析 AngularJS 全球化最优方案(五)