题目:http://poj.org/problem?id=1236

感觉是强连通问题的一道典型题目,还是有很多地方没有注意到,看了discuss才发现:

(1)当整个图已经是一个SCC时

(2)对于SCC缩点后的DAG,实际上等于问我们需要加多少条有向边,使得整个DAG变为强连通,因此,我们要给每个入度为0的点(设有A个)加一条入边,给每个出度为0的点(设有B个)加一条出边,而这些加上的边有重合,那到底要加几条呢,实际上是max(A, B)个

#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
#define MAX     101int N, dfsClock, pre[MAX];
int sccCnt, sccno[MAX], sccOutDegree[MAX], sccInDegree[MAX];
vector<int> list[MAX], scc[MAX];
stack<int> st;int dfs(int x)
{int lowx, y, lowy;const vector<int>& v = list[x];lowx = pre[x] = ++dfsClock;st.push(x);for(int i = 0, n = v.size(); i < n; ++i){y = v[i];if(!pre[y]){lowy = dfs(y);lowx = min(lowx, lowy);}else if(!sccno[y]) lowx = min(lowx, pre[y]);}if(lowx == pre[x]){++sccCnt;scc[sccCnt].clear();while(true){y = st.top(); st.pop();sccno[y] = sccCnt;scc[sccCnt].push_back(y);if(y == x) break;}}return lowx;
}
void findScc()
{memset(pre + 1, 0, N << 2);memset(sccno + 1, 0, N << 2);dfsClock = sccCnt = 0;for(int i = 1; i <= N; ++i){if(!pre[i]) dfs(i);}
}
void findSccInOutDegree()
{bool out[MAX];memset(sccInDegree + 1, 0, sccCnt << 2);for(int i = 1; i <= sccCnt; ++i){memset(out + 1, false, sccCnt);int degree = 0;const vector<int>& v = scc[i];for(int j = 0, n = v.size(); j < n; ++j){const vector<int>& l = list[v[j]];for(int k = 0, m = l.size(); k < m; ++k){int no = sccno[l[k]];if(no != i && !out[no]){out[no] = true;++degree;++sccInDegree[no];}}}sccOutDegree[i] = degree;}
}
void solve()
{findScc();findSccInOutDegree();if(sccCnt == 1){puts("1\n0");return;}int noInScc = 0, noOutScc = 0;for(int i = 1; i <= sccCnt; ++i){if(!sccInDegree[i]) ++noInScc;if(!sccOutDegree[i]) ++noOutScc;}printf("%d\n%d\n", noInScc, max(noInScc, noOutScc));
}
bool input()
{if(1 != scanf("%d", &N)) return false;int j;for(int i = 1; i <= N; ++i){list[i].clear();while(scanf("%d", &j), j){list[i].push_back(j);}}return true;
}int main()
{while(input()) solve();return 0;
}

POJ-1236(有向图强连通分量 + 缩点 + 加边使得整个图强连通)相关推荐

  1. Network of Schools POJ - 1236 tarjan强连通分量缩点

    A number of schools are connected to a computer network. Agreements have been developed among those ...

  2. CF467D Fedor and Essay 有向图强连通分量+缩点

    文章目录 一.题目 二.题解 三.Code Thanks! 一.题目 传送门 翻译: 在你帮助Fedor在«Call of Soldiers 3»这款游戏中找到朋友之后,他完全停止了学习.今天,英语老 ...

  3. POJ 2186 Popular Cows(强连通分量缩点,Tarjan算法)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578 [解题报告] 给你一个有向图,问你有多少个点可以被其它 ...

  4. Tarjan有向图强连通分量

    Tarjan有向图强连通分量 本文仅供娱乐,不喜勿喷 一.强连通分量 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi ...

  5. 图论学习-有向图强连通分量

    文章目录 有向图强连通分量 1.定义: 2.基本术语与概念 2.1 边的概念 2.2 缩点 2.3 时间戳 3. tarjan求强连通分量(SCC) 3.1 原理 3.2 步骤 3.3 模板 3.3. ...

  6. tarjan算法总结 (强连通分量+缩点+割点),看这一篇就够了~

    文章目录 一.tarjan求强连通分量 1:算法流程 2:模板 二.tarjan缩点 1:相关定义 2:算法流程 三.tarjan求割点.桥 1.什么是割点 2.割点怎么求? 3.割点tarjan模板 ...

  7. POJ1236Network of Schools——强连通分量缩点建图

    [题目描述] A number of schools are connected to a computer network. Agreements have been developed among ...

  8. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)

    Link:http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King's Problem Time Limit: 2000/1000 MS (Jav ...

  9. 有向图强连通分量之Tarjan算法

    出处https://www.byvoid.com/zhs/blog/scc-tarjan [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly con ...

最新文章

  1. 配置nginx下别名alias支持PHP fastcgi解析
  2. Cesium入门11 - Interactivity - 交互性
  3. python答案公众号_大学慕课用Python玩转数据答案查题公众号
  4. QT5实现简单的TCP通信
  5. 一款在线工具,克服Python、Java等7种语言编程障碍
  6. mysql trim 索引_mysql强大的trim()函数
  7. liunx版mysql服务无法启动_linux环境下mysql无法启动
  8. PHP 开发邀请功能,使用 larainvite 为 Laravel 5.3 应用添加邀请注册功能
  9. pythonifnotnone_python中if not x: 和 if x is not None: 和 if not x is None的使用和区别
  10. 树莓派python编程入门与实战_树莓派Python编程入门与实战 PDF 下载
  11. MyExcel 3.9.8 版本发布
  12. 从pwn-summoner理解first fit
  13. 深入学习Redis系列文章
  14. HDU - 1008ACM
  15. 网络安全职业_我如何开始网络安全职业
  16. 阿里云对象存储OSS标准型(LRS)存储包详解
  17. 国际歌 英特纳雄耐尔一定要实现
  18. 京东X无人超市落户西安大雁塔 全球首个5A景区店诞生
  19. 借船过河:一个据说能看穿你的人性和欲望的心理测试
  20. 隐藏video标签中各种控件

热门文章

  1. 如何写出高效的代码?(持续更新)
  2. 张晓飞ajax聊天室,张晓飞-华中师范大学数学学院中文站
  3. 伪科学、骗科学、错误科学
  4. 【IT干货】当上技术大神,迎娶白富美,走上人生巅峰的机会了解一下?
  5. alin的学习之路:Qt与多线程
  6. 解决IDEA Warning: Class ‘XXX‘ not found in module ‘XXX‘
  7. 当前发布的sku信息中包含疑似与商品无关的字段,请核实修改后重新提交
  8. 设计模式之外观模式(九)
  9. 如何在YesDev,多团队协作程序员客栈的整包项目?
  10. 主流自媒体平台优势与运营方法