LA 4287 等价性证明(强连通分量缩点)
https://vjudge.net/problem/UVALive-4287
题意:
给出n个结点m条边的有向图,要求加尽量少的边,使得新图强连通。
思路:
强连通分量缩点,然后统计缩点后的图的每个结点是否还需要出度和入度。
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cstdio>
- #include<sstream>
- #include<vector>
- #include<stack>
- #include<queue>
- #include<cmath>
- #include<map>
- #include<set>
- using namespace std;
- typedef long long ll;
- typedef pair<int,ll> pll;
- const int INF = 0x3f3f3f3f;
- const int maxn=+;
- int n, m;
- int tot;
- int dfs_clock;
- int scc_cnt;
- int in[maxn];
- int out[maxn];
- int pre[maxn];
- int head[maxn];
- int sccno[maxn];
- int lowlink[maxn];
- stack<int> S;
- struct node
- {
- int v;
- int next;
- }e[+];
- void addEdge(int u, int v)
- {
- e[tot].v=v;
- e[tot].next=head[u];
- head[u]=tot++;
- }
- void dfs(int u)
- {
- pre[u]=lowlink[u]=++dfs_clock;
- S.push(u);
- for(int i=head[u];i!=-;i=e[i].next)
- {
- int v=e[i].v;
- if(!pre[v])
- {
- dfs(v);
- lowlink[u]=min(lowlink[u],lowlink[v]);
- }
- else if(!sccno[v])
- {
- lowlink[u]=min(lowlink[u],pre[v]);
- }
- }
- if(lowlink[u]==pre[u])
- {
- scc_cnt++;
- for(;;)
- {
- int x=S.top();S.pop();
- sccno[x]=scc_cnt;
- if(x==u) break;
- }
- }
- }
- void find_scc()
- {
- dfs_clock=scc_cnt=;
- memset(sccno,,sizeof(sccno));
- memset(pre,,sizeof(pre));
- for(int i=;i<=n;i++)
- {
- if(!pre[i]) dfs(i);
- }
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d%d",&n,&m);
- tot=;
- memset(head,-,sizeof(head));
- while(m--)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- addEdge(u,v);
- }
- find_scc();
- for(int i=;i<=scc_cnt;i++) in[i]=out[i]=;
- for(int u=;u<=n;u++)
- {
- for(int i=head[u];i!=-;i=e[i].next)
- {
- int v=e[i].v;
- if(sccno[u]!=sccno[v]) in[sccno[v]]=out[sccno[u]]=; //u,v是桥,所以v不需要入度,u不需要出度
- }
- }
- int a=,b=;
- for(int i=;i<=scc_cnt;i++)
- {
- if(in[i]) a++;
- if(out[i]) b++;
- }
- int ans=max(a,b);
- if(scc_cnt==) ans=;
- printf("%d\n",ans);
- }
- return ;
- }
LA 4287 等价性证明(强连通分量缩点)的更多相关文章
- LA 4287 等价性证明
题目链接:http://vjudge.net/contest/141990#overview 题意是告诉你有n个命题,m条递推关系,表示某个命题可以推出另外一个命题. 现在问你至少在增加多少个递推关系 ...
- UVALIVE 4287 Proving Equivalences (强连通分量+缩点)
题意:给定一个图,问至少加入多少条边能够使这个图强连通. 思路:首先求出这个图的强连通分量.然后把每个强连通分量缩成一个点.那么这个图变成了一个DAG,求出全部点的入度和出度,由于强连通图中每个节点的 ...
- LA 4287 有相图的强连通分量
大白书P322 , 一个有向图在添加至少的边使得整个图变成强连通图, 是计算整个图有a个点没有 入度, b 个点没有出度, 答案为 max(a,b) ; 至今不知所云.(求教) #include &l ...
- 训练指南 UVALive - 4287 (强连通分量+缩点)
layout: post title: 训练指南 UVALive - 4287 (强连通分量+缩点) author: "luowentaoaa" catalog: true mat ...
- HDU 3639 Hawk-and-Chicken(强连通分量+缩点)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013480600/article/details/32140501 HDU 3639 Hawk-a ...
- 【强连通分量缩点】poj 1236 Network of Schools
poj.org/problem?id=1236 [题意] 给定一个有向图,求: (1)至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点 (2)至少要加多少条边,才能使得从任何一个顶点出发,都 ...
- POJ1236Network of Schools[强连通分量|缩点]
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16571 Accepted: 65 ...
- POJ1236Network of Schools(强连通分量 + 缩点)
题目链接Network of Schools 参考斌神博客 强连通分量缩点求入度为0的个数和出度为0的分量个数 题目大意:N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后 ...
- HD2767Proving Equivalences(有向图强连通分量+缩点)
题目链接 题意:有n个节点的图,现在给出了m个边,问最小加多少边是的图是强连通的 分析:首先找到强连通分量,然后把每一个强连通分量缩成一个点,然后就得到了一个DAG.接下来,设有a个节点(每个节点对应 ...
随机推荐
- druid部署
Quickstart单机测试 http://druid.io/docs/0.10.1/tutorials/quickstart.html (1)Getting started 下载安装Druid: c ...
- POJ1789:Truck History(Prim算法)
http://poj.org/problem?id=1789 Description Advanced Cargo Movement, Ltd. uses trucks of different ty ...
- R中基本函数学习[转载]
转自:https://www.douban.com/note/511740050/ 1.数据管理 numeric:数值型向量 logical:逻辑型向量 character:字符型向量list:列表 ...
- [LeetCode] 312. Burst Balloons_hard tag: 区间Dynamic Programming
Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...
- 摘自(http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html)
理解Linux系统负荷 作者: 阮一峰 一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行) ...
- string.Format字符串格式说明(转)
转自:http://blog.csdn.net/dl020840504/article/details/8921875 先举几个简单的应用案例: 1.格式化货币(跟系统的环境有关,中文系统默认格式 ...
- JSP—中文乱码
中文乱码问题? --------------------------------------- 不乱码的条件: 1.JSP页面本身的编码 pageEncoding UTF-8 (把jsp页面翻译成ja ...
- curl命令总结
curl常用命令http://www.cnblogs.com/gbyukg/p/3326825.html curl命令后面的网址需要用双引号括起来,原因:防止有特殊字符 &号就是特殊字符 cu ...
- JSON语法2
把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...
- Java求解迷宫问题:栈与回溯算法
摘要: 使用栈的数据结构及相应的回溯算法实现迷宫创建及求解,带点JavaGUI 的基础知识. 难度: 中级 迷宫问题是栈的典型应用,栈通常也与回溯算法连用. 回溯算法的基本描述是: (1) 选择一个 ...