CODEVS 1332 上白泽慧音
来源:互联网 发布:松子deluxe 知乎 编辑:程序博客网 时间:2024/06/10 19:23
//top++//强连通分量的数组要和点的数组一样大 #include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn = 5050;vector<int> g[5050];int low[maxn], stack[maxn], instack[maxn], dfn[maxn], sum[maxn], belong[maxn];int bcnt, top, index, ans, mark;void in(int a, int b){ g[a].push_back(b);}void tarjan(int u){ stack[top++] = u; instack[u] = 1; dfn[u] = low[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[u], low[v]); } else if(instack[v])//访问过且在栈内 low[u] = min(low[u], dfn[v]); } if(low[u] == dfn[u]){ int v; bcnt++; while(u != v){ v = stack[--top]; belong[v] = bcnt; instack[v] = 0; sum[bcnt]++; } }}int main(){ int n, m; cin >> n >> m; for(int i = 1, a, b, y; i <= m; i++){ cin >> a >> b >> y; in(a, b); if(y == 2) in(b, a); } for(int i = 1; i <= n; i++) if(!dfn[i]) tarjan(i); for(int i = 1; i <= n; i++){//通过从小到大遍历找到最大的字典序最小的强连通分量 if(sum[belong[i]] > ans){ ans = sum[belong[i]]; mark = i; } } cout << ans << endl; for(int i = 1; i <= n; i++){ //cout << belong[i] << "/ "; if(belong[i] == belong[mark]) cout << i << " "; } cout << endl; return 0;}
0 0
- codevs 1332 上白泽慧音
- 【codevs 1332】上白泽慧音
- codevs 1332 上白泽慧音
- CODEVS 1332 上白泽慧音
- Codevs 1332 上白泽慧音
- CODEVS 1332 上白泽慧音
- 【codevs 1332】上白泽慧音
- codevs 1332 上白泽慧音(Tarjan)
- <tarjan算法模板> codevs 1332 上白泽慧音
- Codevs
- codevs 1060
- [CodeVS]3304
- codevs 4248
- Codevs 苹果树
- Codevs 挂缀
- Codevs 加密算法
- CodeVs 1011
- codevs 买票
- iOS-UICollectionViewLayout方法简单介绍
- C语言图形界面编程
- CentOS7 minimal下MySQL安装
- elasticsearch-- search guard安装与配置
- Node.js
- CODEVS 1332 上白泽慧音
- 生产管理企业科学统计产品数据,高效完成数据分析
- 岑辉宇:苦逼SEO如何实现自身价值的提升?实现逆袭
- 随想,从励志书说起
- java中niosocket的实例使用
- weex基于vue2.0总结
- 嵌入式Linux使用Busybox init进程启动过程分析
- Java学习之编码解码
- Spring data JPA