强连通分量模板
来源:互联网 发布:php流媒体服务器 编辑:程序博客网 时间:2024/05/29 17:41
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;#define ll long long#define me(a,b) memset(a,b,sizeof(a))struct node{ int u,next;}e[100005];int top,tot,cnt,sum,head[100005],dfn[10005],low[10005],book[10005],stack[10005],belong[10005];void add(int u,int v){ e[top].u=v; e[top].next=head[u]; head[u]=top++;}void tarjan(int x){ dfn[x]=low[x]=++tot; stack[cnt++]=x; book[x]=1; for(int i=head[x];i!=-1;i=e[i].next) { int u=e[i].u; if(!dfn[u]) { tarjan(u); low[x]=min(low[x],low[u]); } else if(book[u]) { low[x]=min(low[x],dfn[u]); } }int t; if(low[x]==dfn[x]) { sum++; do{ t=stack[--cnt]; book[t]=0; belong[t]=sum; }while(t!=x); }}int main(){ int n,m; while(~scanf("%d%d",&n,&m)&&(n+m)) { int a,b; me(head,-1); me(dfn,0); top=tot=cnt=sum=0; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); add(a,b); } for(int i=1;i<=n;i++) { if(!dfn[i]) tarjan(i); } if(sum==1) printf("Yes\n"); else printf("No\n"); }}
阅读全文
1 0
- 强连通分量模板
- 强连通分量模板
- 强连通分量模板
- 强连通分量 模板
- 强连通分量模板
- 强连通分量模板
- 强连通分量模板
- 【强连通分量模板】
- 【模板】强连通分量
- 强连通分量模板
- 强连通分量Tarjan模板
- 强连通分量(模板)
- Tarjan强连通分量模板
- 强连通分量缩点的模板
- hdu1269 Tarjan强连通分量 模板
- tarjan求强连通分量模板
- 强连通分量-tarjan算法模板详解
- tarjan 求强连通分量模板
- [Hdu] 2665 Kth number(主席树模板题)
- Codeforces 385D -Bear and Floodlight (状压DP+几何)
- Hive 函数参考手册
- %lf与%f的区别
- Invalid bound statement (not found): com.zhiyou100.video.mapper.SpeakerMapper.speakerTotalCount
- 强连通分量模板
- xlistview 上拉刷新 下拉加载
- Kotlin通过Id操作View,Adapter和动态加载Xml文件也可以类似操作
- 数据库事务
- Python 边做边学 9.1 数据库操作--整体设计
- Android 手机号分段
- Presentation Error
- Ant之build.xml
- 小游戏(搜索)