题意:

一个有向图,问最少加几条边,能让它强连通

方法:

1:tarjan 缩点

2:采用如下构造法:

缩点后的图找到所有头结点和尾结点,那么,可以这么构造:把所有的尾结点连一条边到头结点,就必然可以是强连通了。如果说有几个结点不连通,那么让他们的尾结点相互只向对方的头结点就好了。

那么,最后的答案就是,头结点和尾结点中比较小的那个数量。

当然,如果缩点后只有一个点,那么就是0;

代码:

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define N 20010
using namespace std;
vector <int> to[N];
vector <int> g[N];
int in[N], out[N];
//#define vii vector<int>iterator;
int low[N], dep[N], id[N], s[N], top, scnt, cnt;
int n, m;
void tarinit() {
top = cnt = scnt = ;
memset(dep, -, sizeof(dep));
} void tarjan(int u) {
int minc = low[u] = dep[u] = cnt++;
s[top++] = u;
int end = to[u].size();
for (int i = ; i < end; i++) {
if (dep[to[u][i]] == -) tarjan(to[u][i]);
if (minc > low[to[u][i]]) minc = low[to[u][i]];
}
if (minc < low[u]) low[u] = minc;
else {
while (s[top] != u){
id[s[--top]] = scnt;
low[s[top]] = n+;
}
scnt++;
}
} int main() {
int t;
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++) to[i].clear(), g[i].clear();
for (int i = ; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
to[u].push_back(v);
}
tarinit();
for (int i = ; i <= n; i++) {
if (dep[i] == -) {
tarjan(i);
}
}
memset(out,,sizeof(out));
memset(in,,sizeof(in));
for (int i = ; i <= n; i++) {
int end = to[i].size();
for (int j = ; j < end; j++) {
if (id[i] != id[to[i][j]]) {
out[id[i]]++;
in[id[to[i][j]]]++;
}
}
}
if (scnt == ) {
puts("");
continue;
}
int root = ;
int leaf = ;
for (int i = ; i < scnt; i++) {
if (out[i] == ) leaf++;
if (in[i] == ) root++;
}
printf("%d\n", max(root,leaf));
}
return ;
}

最新文章

  1. &lt;s:property value=&quot;&quot;/&gt; 怎么截取返回值的固定长度的字符串
  2. 使用openssl的一些问题
  3. 麦咖啡阻挡正常打开Excel文件
  4. SQL Server 大数据量分页建议方案
  5. ubuntu 获取root权限
  6. XHR——XMLHttpRequest对象
  7. SQL锁表解决并发性
  8. OC中-数组是如何遍历的?
  9. PHP 内存的分布问题
  10. OD调试9—实例:深入分析代码完成软件破解
  11. linux中的权限
  12. HTML基础教程-元素
  13. [HNOI2008]越狱
  14. Linux 命令——tee 重定向到文件并打印到屏幕
  15. Linux内核入门到放弃-模块-《深入Linux内核架构》笔记
  16. weixin://connectToFreeWifi/?apKey=协议如何跳转到微信客户端打开在wifi指定任意网页?
  17. zookeeper权限问题
  18. Python数据类型-7
  19. Chrome禁止http自动转为https
  20. IT项目管理流程以及每个步骤用到的文档

热门文章

  1. pycharm安装 suds模块报错:AttributeError: module &#39;pip&#39; has no attribute &#39;main&#39;
  2. 11Vim文本编辑器
  3. python 类的使用
  4. python中打印金字塔和九九乘法表的几种方法
  5. IOC容器和Bean的配置实例
  6. HDU:2767-Proving Equivalences(添边形成连通图)
  7. HDU 5371 Manacher Hotaru&#39;s problem
  8. 哪里是Maven的中央存储库?
  9. [POJ 1000] A+B Problem 经典水题 C++解题报告 JAVA解题报告
  10. session的工作原理、django的超时时间设置及session过期判断