把证明的关系看出一张图,最终就是要所有的点都在至少一个环中。环的判断和度数有关。

用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a,

出度为0的b,取其中大的一个。特判强连通分量数为1的情况。

看懂tarjan算法以后还是比较简单的

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e4+;
const int maxm = 5e4+; int head[maxn],nxt[maxm],to[maxm],ecnt;
void addEdge(int u,int v)
{
nxt[ecnt] = head[u];
to[ecnt] = v;
head[u] = ecnt++;
} void initGraph(int n)
{
memset(head,-,sizeof(int)*(n+)); ecnt = ;
} int sccno[maxn],pre[maxn],low[maxn],dfs_clock,scc_cnt;
stack<int> stk; void tarjan(int u)
{
pre[u] = low[u] = ++dfs_clock;
stk.push(u);
for(int i = head[u]; ~i; i = nxt[i]){
int v = to[i];
if(!pre[v]){
tarjan(v);
low[u] = min(low[u],low[v]);
}else if(!sccno[v]){
low[u] = min(low[u],pre[v]);
}
}
if(low[u] == pre[u]){
scc_cnt++;
while(stk.size()){
int x = stk.top(); stk.pop();
sccno[x] = scc_cnt;
if(x == u) break;
}
}
} void find_scc(int n)
{
memset(pre,,sizeof(int)*(n+));
memset(sccno,,sizeof(int)*(n+));
scc_cnt = dfs_clock = ;
for(int i = ; i < n; i++){
if(!pre[i]) tarjan(i);
}
} int ind[maxn],outd[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int T; scanf("%d",&T);
while(T--){
int n,m; scanf("%d%d",&n,&m);
initGraph(n);
for(int i = ; i < m; i++){
int u,v; scanf("%d%d",&u,&v);
addEdge(u-,v-);
}
find_scc(n);
if(scc_cnt == ) {
printf("0\n"); continue;
}
for(int i = ; i <= scc_cnt; i++) ind[i] = outd[i] = ;
for(int u = ; u < n; u++){
for(int i = head[u]; ~i; i = nxt[i]){
int v = to[i];
if(sccno[u] != sccno[v]) outd[sccno[u]]++,ind[sccno[v]]++;
}
}
int a = ,b = ;
for(int i = ; i <= scc_cnt; i++){
if(!outd[i]) b++;
if(!ind[i]) a++;
}
printf("%d\n",max(a,b));
}
return ;
}

UVALive 4287 Proving Equivalence (强连通分量)的更多相关文章

  1. UvaLive 4287 Proving Equivalences 强连通缩点

    原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  2. UVALive - 4287 - Proving Equivalences(强连通分量)

    Problem   UVALive - 4287 - Proving Equivalences Time Limit: 3000 mSec Problem Description Input Outp ...

  3. UVALIVE 4287 Proving Equivalences (强连通分量+缩点)

    题意:给定一个图,问至少加入多少条边能够使这个图强连通. 思路:首先求出这个图的强连通分量.然后把每个强连通分量缩成一个点.那么这个图变成了一个DAG,求出全部点的入度和出度,由于强连通图中每个节点的 ...

  4. UVALive Proving Equivalences (强连通分量,常规)

    题意: 给一个有向图,问添加几条边可以使其强连通. 思路: tarjan算法求强连通分量,然后缩点求各个强连通分量的出入度,答案是max(入度为0的缩点个数,出度为0的缩点个数). #include ...

  5. UVALive - 4287 Proving Equivalences

    给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图 ...

  6. UVALive 4287 Proving Equivalences(缩点)

    等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件. 容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG. ...

  7. Proving Equivalences UVALive - 4287(强连通分量 水题)

    就是统计入度为0 的点 和 出度为0 的点  输出 大的那一个,, 若图中只有一个强连通分量 则输出0即可 和https://www.cnblogs.com/WTSRUVF/p/9301096.htm ...

  8. 训练指南 UVALive - 4287 (强连通分量+缩点)

    layout: post title: 训练指南 UVALive - 4287 (强连通分量+缩点) author: "luowentaoaa" catalog: true mat ...

  9. UVALive 4287 SCC-Tarjan 加边变成强连通分量

    还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量 然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛... ...

随机推荐

  1. @Conditional注解的作用

    @Conditional是用有条件的加载bean. @Configuration public class TestBeanConfig { // 根据条件创建, 条件写在TestConditiona ...

  2. 6、html的body内标签之超链接

    一.超链接 <a href="https://www.baidu.com" target="_blank">某度</a> #target ...

  3. SqlServer规则

    定义:规则时单独的SQLServer对象,可以关联到一个或几个表中的一列或几列.它可以使用多种方式来完成对数据值的校验,可以使用函数返回验证信息,也可以使用关键字BETWEEN,LIKE和IN完成对输 ...

  4. 609. Find Duplicate File in System

    Given a list of directory info including directory path, and all the files with contents in this dir ...

  5. 算法学习--Day6

    题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...

  6. 5-5 城市间紧急救援 (25分)【最短路spfa】

    5-5 城市间紧急救援   (25分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...

  7. unity3d 在UGUI中制作自适应调整大小的滚动布局控件

    http://blog.csdn.net/rcfalcon/article/details/43459387 在游戏中,我们很多地方需要用到scroll content的概念:我们需要一个容器,能够指 ...

  8. Unity(1) 编辑器结构

    5个主要视图视图,未完,持续补充... 1 Project(项目) 用于显示资源 Favorites:按资源分类显示 Assets:按目录结构显示 特殊说明 Prefabs(预设),用于场景中游戏对象 ...

  9. 在maven中引入本地jar包的方法

    一.第一种方式: 1.电脑安装maven 2.下载jar.例如 gj.jar 3.把jar随便放一个位置 4.在jar包目录下打开cmd输入: mvn install:install-file -Df ...

  10. PostgreSQL-14-异常值处理

    -- 查看异常值CREATE TABLE outerdata(id int PRIMARY KEY,value numeric); \COPY outerdata FROM 'C:\Users\iHJ ...