tjut 1269
2016-07-29 11:44
323 查看
/*2012-12-06 20:16:08 Accepted 1269 46MS 1484K 1339 B C++*/ #include <cstdio> #include <iostream> #include <vector> using namespace std; #define maxn 10010 int n; vector<int> g[maxn]; int Bcnt; /// 强连通分量的个数; int Top; /// 栈顶; int Index; /// 时间戳; int low[maxn], dfn[maxn]; int belong[maxn], stack[maxn]; bool instack[maxn]; void Init_tarjan(){ Bcnt= Top= Index= 0; for(int i=1; i<=n; ++i) low[i]= dfn[i]= 0; } void Tarjan(int u){ stack[Top++]= u; instack[u]= 1; low[u]= dfn[u]= ++Index; for(int i=0; i<g[u].size(); ++i){ int v= g[u][i]; if( !dfn[v] ){ Tarjan(v); low[u]= min( low[v], low[u] ); } else if( instack[v] ) low[u]= min( low[u], dfn[v] ); } if( low[u]==dfn[u] ){ ++Bcnt; int v; do{ v= stack[--Top]; instack[v]= 0; belong[v]= Bcnt; }while( u!=v ); } } int main() { int m; while( cin>>n>>m, n+m ){ for(int i=1; i<=n; ++i) g[i].clear(); while(m--){ int x, y; scanf("%d%d", &x, &y); g[x].push_back(y); } Init_tarjan(); for(int i=1; i<=n; ++i){ if( !dfn[i] ) Tarjan(1); } puts( Bcnt==1 ? "Yes" : "No" ); } }
相关文章推荐
- Android_baseComponentExample
- alibaba fastjson List<Map<String, String>>2Str
- python数字图像处理(9):直方图与均衡化
- dubbox 的各种管理和监管
- jquery、js 金额小写转成大写
- solr5.1.0 部署配置
- MySQL 5.6+版本设置long_query_time的值无效的原因及解决方法
- 孙鑫Lesson2 grammer
- jasper dynamic sheet name
- Thinking in Java 第21章 并发
- python数字图像处理(8):对比度与亮度调整
- 关于大型网站架构的两本经典书籍
- ServletFileUpload上传文件带进度条
- 注释符号的归纳>_<不想再入坑呀
- 利用shell删除数据表中指定信息和字段对应的文件
- Java的this关键字使用(无笔记、待复习)
- usb_modeswitch使用详解
- 常用工具类的介绍
- PHP关于foreach使用引用变量的坑
- Shell_Linux bash shell 逐行读取文件的三种方法