HDU 3836 Equivalent Sets(强连通分量 Tarjan缩点)
2015-07-19 11:56
666 查看
Tarjan求强连通分量详解在前一篇文章
把一个有向图变为强连通分量至少要加几条边?
Tarjan缩点后,设a为入度为0的点数,b为出度为0的点数,答案max(a,b)。
注意:如果图本来是强连通的,要特判为0,否则输入会为1
代码:
把一个有向图变为强连通分量至少要加几条边?
Tarjan缩点后,设a为入度为0的点数,b为出度为0的点数,答案max(a,b)。
注意:如果图本来是强连通的,要特判为0,否则输入会为1
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #include <algorithm> #include <vector> #include <stack> #define CLR(a,b) memset(a,b,sizeof(a)) #define maxn 20005 vector <int> G[maxn]; int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt; stack <int> S; bool in[maxn],out[maxn]; int N,M; void dfs(int u){ pre[u]=lowlink[u]=++dfs_clock; S.push(u); for(int i=0;i<G[u].size();i++){ int v=G[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; CLR(sccno,0); CLR(pre,0); while(!S.empty()) S.pop(); for(int i=1;i<=n;i++){ if(!pre[i]) dfs(i); } } int main(){ while(~scanf("%d%d",&N,&M)){ for(int i=0;i<=N;i++){ G[i].clear(); } for(int i=0;i<M;i++){ int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); } find_scc(N); CLR(in,0); CLR(out,0); for(int i=1;i<=N;i++){ for(int j=0;j<G[i].size();j++){ int k=G[i][j]; if(sccno[i]!=sccno[k]){ in[sccno[k]]=1; out[sccno[i]]=1; } } } int a=0,b=0; for(int i=1;i<=scc_cnt;i++){ if(!in[i]) a++; if(!out[i]) b++; } int res=max(a,b); if(scc_cnt==1) res=0; printf("%d\n",res); } return 0; }
相关文章推荐
- 使用fastcgi_finish_request提高页面响应速度
- 图片水印(UIImage类目)
- [LeetCode]Implement Stack using Queues
- ZOJ 1926 Guessing Game
- HDU 2604 Queuing
- 转:抗锯齿方法两种(其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true))
- Linking different libraries for Debug and Release builds in Cmake on windows?
- OpenCV Access pixel value
- 使用Fuel安装OpenStack juno之一安装Fuel Master
- 数据的刷新(UITableViewCell实现点击单元格弹窗更改数据)
- UITableView性能优化(复用池的使用原理)
- iOS切换到UiScrollView界面卡死
- 图片轮播器(UIScrollView-UIPageControl)
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- 炫酷的AndroidUI库集合
- POJ 1947 Rebuilding Roads (树形DP)
- UITextView 不左上角显示
- 汤姆猫程序(UIImageView动画)
- Gitlab 上Iisues 使用以及代码管理
- UIView相对坐标转换