UvaLive 4287 Proving Equivalences 强连通缩点
原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2288
题意:
给你一个有向图,问你至少需要添加多少条边,使得整个图强连通。
题解:
就。。直接缩点,令缩点后入度为0的点有a个,出度为0的点有b个,答案就是max(a,b)
代码:
- #include<iostream>
- #include<cstring>
- #include<vector>
- #include<algorithm>
- #include<stack>
- #define MAX_N 20004
- using namespace std;
- vector<int> G[MAX_N];
- int dfn[MAX_N],low[MAX_N],ind;
- bool vis[MAX_N];
- stack<int> st;
- bool inStack[MAX_N];
- int id[MAX_N],tot=;
- vector<int> newG[MAX_N];
- vector<int> newrG[MAX_N];
- int n,m;
- void init() {
- for (int i = ; i <= n; i++) {
- G[i].clear();
- newG[i].clear();
- newrG[i].clear();
- }
- memset(dfn, , sizeof(dfn));
- memset(low, , sizeof(low));
- ind = tot = ;
- memset(vis, , sizeof(vis));
- while (st.size())st.pop();
- memset(inStack, , sizeof(inStack));
- memset(id, , sizeof(id));
- }
- void Tarjan(int u) {
- dfn[u] = low[u] = ++ind;
- st.push(u);
- inStack[u] = ;
- vis[u] = ;
- for (int i = ; i < G[u].size(); i++) {
- int v = G[u][i];
- if (!vis[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]) {
- tot++;
- int t;
- do {
- t = st.top();
- st.pop();
- inStack[t] = ;
- id[t] = tot;
- } while (t != u);
- }
- }
- int main() {
- int T;
- cin.sync_with_stdio(false);
- cin >> T;
- while (T--) {
- cin >> n >> m;
- int ans = ;
- init();
- for (int i = ; i < m; i++) {
- int u, v;
- cin >> u >> v;
- G[u].push_back(v);
- }
- for (int i = ; i <= n; i++)
- if (!vis[i])Tarjan(i);
- for (int u = ; u <= n; u++)
- for (int i = ; i < G[u].size(); i++)
- if (id[u] != id[G[u][i]]) {
- newG[id[u]].push_back(id[G[u][i]]);
- newrG[id[G[u][i]]].push_back(id[u]);
- }
- if (tot == ) {
- cout << << endl;
- continue;
- }
- int a = , b = ;
- for (int u = ; u <= tot; u++) {
- if (newG[u].size() == )a++;
- if (newrG[u].size() == )b++;
- }
- cout << max(a, b) << endl;
- }
- return ;
- }
UvaLive 4287 Proving Equivalences 强连通缩点的更多相关文章
- UVALive 4287 Proving Equivalences(缩点)
等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件. 容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG. ...
- UVALive - 4287 - Proving Equivalences(强连通分量)
Problem UVALive - 4287 - Proving Equivalences Time Limit: 3000 mSec Problem Description Input Outp ...
- hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...
- UVALIVE 4287 Proving Equivalences (强连通分量+缩点)
题意:给定一个图,问至少加入多少条边能够使这个图强连通. 思路:首先求出这个图的强连通分量.然后把每个强连通分量缩成一个点.那么这个图变成了一个DAG,求出全部点的入度和出度,由于强连通图中每个节点的 ...
- UVALive - 4287 Proving Equivalences
给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图 ...
- UVALive Proving Equivalences (强连通分量,常规)
题意: 给一个有向图,问添加几条边可以使其强连通. 思路: tarjan算法求强连通分量,然后缩点求各个强连通分量的出入度,答案是max(入度为0的缩点个数,出度为0的缩点个数). #include ...
- UVALive 4287 Proving Equivalence (强连通分量)
把证明的关系看出一张图,最终就是要所有的点都在至少一个环中.环的判断和度数有关. 用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a, 出度为0的b,取 ...
- 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 --- 强连通
给一个图,问至少加入�多少条有向边能够使图变成强连通的. 原图是有环的,缩点建图,在该DAG图上我们能够发现,要使该图变成强连通图必须连成环 而加入�最少的边连成环,就是把图上入度为0和出度为0的点连 ...
随机推荐
- leetcode-17-BST
530. Minimum Absolute Difference in BST Given a binary search tree with non-negative values, find th ...
- STM8 EEPROM心得
对于STM8来说,其内部的EEPROM确实是个不错的东西,而且STM8S103/105价格已经非常便宜了,当然也可以用STM8S003/005代替,而且价格更便宜,大概在,1.2/2.0元左右,比10 ...
- LA 7072 Signal Interference 计算几何 圆与多边形的交
题意: 给出一个\(n\)个点的简单多边形,和两个点\(A, B\)还有一个常数\(k(0.2 \leq k < 0.8)\). 点\(P\)满足\(\left | PB \right | \l ...
- joyoi tyvj1313 [NOIP2010初赛]烽火传递
单调队列优化dp #include <iostream> #include <cstdio> using namespace std; int dp[1000005], n, ...
- Selenium 报错:Element is not clickable at point
WebDriverException: unknown error: Element <td class="grid - select - input " stype=&qu ...
- Nginx从入门到放弃-第5章 Nginx架构篇
5-1 Nginx常见问题_架构篇介绍 5-2 Nginx常见问题_多个server中虚拟主机读取的优先级 5-3 Nginx常见问题_多个location匹配的优先级1 5-4 Nginx常见问题_ ...
- aiomysql inserting operation failed !
emotions: those days,i am using aiomysql(python3.5) to acess my database .But a 'strange' problem ma ...
- [python学习篇][书籍学习][python standrad library][内建类型]迭代器类型
我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...
- 是男人就过 8 题--Pony.AI A AStringGame
链接:https://www.nowcoder.com/acm/contest/92/A来源:牛客网 AStringGame 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 26214 ...
- HLG2179 组合(dfs水水更健康)
组合 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 57(38 users) Total Accepted: 43(36 users) ...