hdu 2767 Proving Equivalences(tarjan缩点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2767
题意:问最少加多少边可以让所有点都相互连通。
题解:如果强连通分量就1个直接输出0,否者输出入度为0的缩点,出度为0的缩点和的最大值
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- using namespace std;
- const int N = 2e4 + 10;
- const int M = 5e4 + 10;
- struct Edge {
- int v, next;
- }edge[M];
- int head[N], e;
- int Low[N], DFN[N], Belong[N], num[N], Stack[N];
- int Index, top, scc;
- int In[N], Out[N];
- bool Instack[N];
- void init() {
- memset(head, -1, sizeof(head));
- e = 0;
- }
- void add(int u, int v) {
- edge[e].v = v;
- edge[e].next = head[u];
- head[u] = e++;
- }
- void Tarjan(int u) {
- int v;
- Low[u] = DFN[u] = ++Index;
- Stack[top++] = u;
- Instack[u] = true;
- for(int i = head[u]; i != -1; i = edge[i].next) {
- v = edge[i].v;
- 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]) {
- scc++;
- do {
- v = Stack[--top];
- Instack[v] = false;
- Belong[v] = scc;
- num[scc]++;
- } while(v != u);
- }
- }
- int main() {
- int t;
- scanf("%d", &t);
- while(t--) {
- int n, m;
- scanf("%d%d", &n, &m);
- init();
- for(int i = 0; i < m; i++) {
- int s1, s2;
- scanf("%d%d", &s1, &s2);
- add(s1, s2);
- }
- memset(DFN, 0, sizeof(DFN));
- memset(Instack, false, sizeof(Instack));
- memset(Belong, 0, sizeof(Belong));
- memset(num, 0, sizeof(num));
- memset(In, 0, sizeof(In));
- memset(Out, 0, sizeof(Out));
- scc = 0, Index = 0, top = 0;
- for(int i = 1; i <= n; i++) {
- if(!DFN[i]) Tarjan(i);
- }
- for(int i = 1; i <= n; i++) {
- for(int j = head[i]; j != -1; j = edge[j].next) {
- int v = edge[j].v;
- if(Belong[i] != Belong[v]) {In[Belong[v]]++, Out[Belong[i]]++;}
- }
- }
- int mxin = 0, mxout = 0;
- for(int i = 1; i <= scc; i++) {
- if(In[i] == 0) mxin++;
- if(Out[i] == 0) mxout++;
- }
- if(scc == 1) printf("0\n");
- else printf("%d\n", max(mxin, mxout));
- }
- return 0;
- }
hdu 2767 Proving Equivalences(tarjan缩点)的更多相关文章
- hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...
- HDU 2767 Proving Equivalences (强联通)
pid=2767">http://acm.hdu.edu.cn/showproblem.php?pid=2767 Proving Equivalences Time Limit: 40 ...
- HDU 2767 Proving Equivalences (Tarjan)
Proving Equivalences Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other ...
- hdu 2767 Proving Equivalences
Proving Equivalences 题意:输入一个有向图(强连通图就是定义在有向图上的),有n(1 ≤ n ≤ 20000)个节点和m(0 ≤ m ≤ 50000)条有向边:问添加几条边可使图变 ...
- HDU 2767 Proving Equivalences(至少增加多少条边使得有向图变成强连通图)
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 2767:Proving Equivalences(强连通)
题意: 一个有向图,问最少加几条边,能让它强连通 方法: 1:tarjan 缩点 2:采用如下构造法: 缩点后的图找到所有头结点和尾结点,那么,可以这么构造:把所有的尾结点连一条边到头结点,就必然可以 ...
- HDU 2767 Proving Equivalences(强连通 Tarjan+缩点)
Consider the following exercise, found in a generic linear algebra textbook. Let A be an n × n matri ...
- hdu2767 Proving Equivalences Tarjan缩点
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- hdoj 2767 Proving Equivalences【求scc&&缩点】【求最少添加多少条边使这个图成为一个scc】
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
随机推荐
- 多线程编程(Linux C)
多线程编程可以说每个程序员的基本功,同时也是开发中的难点之一,本文以Linux C为例,讲述了线程的创建及常用的几种线程同步的方式,最后对多线程编程进行了总结与思考并给出代码示例. 一.创建线程 多线 ...
- 有容云-PPT | 当微服务遇见容器
编者注: 本文为10月29日有容云高级技术顾问龙淼在Docker Live时代线下系列-广州站中演讲的PPT,本次线下沙龙为有容云倾力打造Docker Live时代系列主题线下沙龙,每月一期畅聊容器技 ...
- 最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)
前言: 最近开发了Zuul网关的实现和Spring Cloud Gateway实现,对比Spring Cloud Gateway发现后者性能好支持场景也丰富.在高并发或者复杂的分布式下,后者限流和自定 ...
- 48.QT-网络通信讲解1
网络概念 MAC地址(硬件地址) 网络IP地址(如192.168.1.101) 网络端口(实现多路通信,用来给不同应用程序来区分使用,范围0~65535,比如浏览网页服务(80端口), FTP服务(2 ...
- Educational Codeforces Round 70 (Rated for Div. 2)
这次真的好难...... 我这个绿名蒟蒻真的要崩溃了555... 我第二题就不会写...... 暴力搜索MLE得飞起. 好像用到最短路?然而我并没有学过,看来这个知识点又要学. 后面的题目赛中都没看, ...
- Linux curl 命令详解
命令概要 该命令设计用于在没有用户交互的情况下工作. curl 是一个工具,用于传输来自服务器或者到服务器的数据.「向服务器传输数据或者获取来自服务器的数据」 可支持的协议有(DICT.FILE.FT ...
- MySQL一键生成实体文件的神器-ginbro
Java转过来的同学对Mybatis的使用肯定不陌生,特别是对一堆表去生成相应的dao和entity的时候使用Mybatis generator所带来的感触,无比深刻.前面我们也讲过原生的数据库使用, ...
- 前后端分离后台api接口框架探索
前言 很久没写文章了,今天有时间,把自己一直以来想说的,写出来,算是一种总结吧! 这篇文章主要说前后端分离模式下(也包括app开发),自己对后台框架和与前端交互的一些理解和看法. 前后端分离 ...
- oracle常规使用(一)
目录 特殊sql distinct 项目中遇到表中无主键,但是某个字段不能重复. 需要匹配id串里的内容 批量更新,但是批量成功返回的是-1 时间格式化 行列互转 应用场景 列转行 总结 oracle ...
- Java学习|HTTP请求头
https://www.cnblogs.com/honghong87/articles/6941436.html 常见http请求报文头属性 Accept:告诉服务端,客户端接受什么类型的响 ...