#include <cstring>
#include <cstdlib>
#include <cstdio>
缩点的好处就是可以将乱七八糟的有向图 转化为无环的有向图
#include <iostream>
#include <algorithm>
#include <cmath>
#include <stack>
using namespace std;
#define MAXN 200010
#define clr(x,k) memset((x),(k),sizeof(x))
struct node
{
int st,to,next;
}
edge[MAXN];
int n,m,ct,id;
int head[MAXN],low[MAXN],dfn[MAXN],belong[MAXN],in[MAXN],to[MAXN];
//DFN[i]表示 遍历到 i 点时是第几次dfs
//Low[u] 表示 以u点为父节点的 子树 能连接到 [栈中] 最上端的点 的DFN值
bool instack[MAXN];
stack<int>q;
void add_e(int i,int u,int v)
{
edge[i].st=u;
edge[i].to=v;
edge[i].next=head[u];
head[u]=i;
}
void tarjan(int i)
{
int j;
dfn[i]=low[i]=++id;
q.push(i);
instack[i]=1;
for(int u=head[i]; ~u; u=edge[u].next)
{
j=edge[u].to;
if(dfn[j]==0)
{
tarjan(j);
if(low[i]>low[j])
low[i]=low[j];
}
else if(instack[j]&&low[i]>low[j])
low[i]=dfn[j];
}
if(dfn[i]==low[i])
{
ct++;
do
{
j=q.top();
q.pop();
instack[j]=0;
belong[j]=ct;
}
while(i!=j);
}
}
int main()
{
int t,i,u,v,sum1,sum2;
cin>>t;
while(t--)
{
clr(head,-1);
clr(low,0);
clr(dfn,0);
clr(belong,0);
clr(in,0);
clr(to,0);
while(!q.empty())
q.pop();
cin>>n>>m;
for(i=0; i<m; i++)
{
cin>>u>>v;
add_e(i,u,v);
}
id=ct=0;
for(i=1; i<=n; i++)
{
if(!dfn[i])
tarjan(i);
}
if(ct==1)
{
cout<<0<<endl;
continue;
}
for(i=1; i<=ct; i++)
{
in[i]=to[i]=0;
}
for(i=0; i<m; i++)// 利用染色进行缩点 新的图的点的坐标为第i个强连通分量
{
if(belong[edge[i].st]!=belong[edge[i].to])
{
in[belong[edge[i].st]]++;
to[belong[edge[i].to]]++;
}
}
sum1=sum2=0;
for(i=1; i<=ct; i++)
{
if(in[i]==0)
sum1++;
if(to[i]==0)
sum2++;
}
cout<<max(sum1,sum2)<<endl;
}
return 0;
}

hdu 2767 强连通缩点处理加边问题的更多相关文章

  1. hdu 3836 强连通+缩点:加边构强连通

    #include<stdio.h>//求出其所有的强连通分量缩点,选出出度和入度最大的那个就是要求的边 #include<string.h> #include<stdli ...

  2. HDU 1827 强连通 缩点 Summer Holiday

    求出强连通分量,因为强连通中只要有一个人被通知到了,所有人都能被通知到. 缩点以后形成一个DAG,找出那些入度为0的点,累加上它们的权值就是答案.一个点的权值等于SCC中权值最小的那个点. #incl ...

  3. UVa 12167 & HDU 2767 强连通分量 Proving Equivalences

    题意:给出一个有向图,问最少添加几条有向边使得原图强连通. 解法:求出SCC后缩点,统计一下出度为0的点和入度为0的点,二者取最大值就是答案. 还有个特殊情况就是本身就是强连通的话,答案就是0. #i ...

  4. hdu 3072 强连通+缩点+最小树形图思想

    #include<stdio.h> #include<string.h> #define N 51000 #define inf 1000000000 struct node ...

  5. hdu 4635 Strongly connected 强连通缩点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给你一个n个点m条边的图,问在图不是强连通图的情况下,最多可以向图中添多少条边,若图为原来 ...

  6. 有向图 加最少的边 成为强连通分量的证明 poj 1236 hdu 2767

    poj 1236: 题目大意:给出一个有向图, 任务一: 求最少的点,使得从这些点出发可以遍历整张图  任务二: 求最少加多少边 使整个图变成一个强连通分量. 首先任务一很好做, 只要缩点 之后 求 ...

  7. hdu 2767 Proving Equivalences 强连通缩点

    给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...

  8. hdu 2767 Proving Equivalences(tarjan缩点)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2767 题意:问最少加多少边可以让所有点都相互连通. 题解:如果强连通分量就1个直接输出0,否者输出入度 ...

  9. 【HDU 5934】Bomb(强连通缩点)

    Problem Description There are N bombs needing exploding. Each bomb has three attributes: exploding r ...

随机推荐

  1. VS2010,VS2013 Datagridview控件的编辑列功能,弹窗界面被挤扁了

    搜了很久,没找到解决办法,在一个角落看到说要卸载Framework,实践后可以,发出来记一下. 解决办法: 发现自己电脑上多了Framework4.8,可能安装VS2013的时候自动安装的. 卸载了F ...

  2. JDK1.6历史版本的下载(關於TLSv1.2)Oracle的官方文檔

    [资源描述]:对于部分老项目 仍然采用的是JDK1.6 版本 但是打开官方 JDK 都是最新的 版本 想找 历史版本 不容易找到 [资源详情]:提供下载链接: http://www.oracle.co ...

  3. 分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片

    2016-08-05更新: 下方的代码是比较OLD的了,是通过js进行图片的剪切 旋转 再生成,效率较低. 后来又整合了一个利用native.js本地接口的压缩代码 ,链接在这 .页面中有详细的说明, ...

  4. 第04组 Beta冲刺(1)

    队名:斗地组 组长博客:地址 作业博客:Beta冲刺(1/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文档 ...

  5. vue常用的修饰符

    v-model修饰符 <template> <div id="demo14"> <p>-----------------模板语法之修饰符---- ...

  6. 二、navicat连接本地数据库以及远程数据库

    本地连接 1.打开navicat 2.连接 最后点击确定就连接成功了: 远程数据库 和上面一样.....

  7. python-30个骚操作

    1.冒泡排序     2.计算x的n次方的方法     3.计算a*a + b*b + c*c + ……     4.计算阶乘 n!             5.列出当前目录下的所有文件和目录名   ...

  8. postgresql之 drop & delete & truncate

    官网:https://www.postgresql.org/docs/8.1/sql-droptable.html Name DROP TABLE -- remove a table Synopsis ...

  9. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_17.RabbitMQ研究-与springboot整合-消费者代码

    创建消费者的类 使用@Component把这个类标记成一个Bean 把生产者里面创建的配置文件类复制过来 在原始的消费的方法上面 ,我们是可以拿到channel通道的 message.getBody就 ...

  10. Spring A 标签链接使用

    1.示例 <a th:href="@{/edit/{id}(id=${user.id})}">修改</a> 以@开头前面的{id}是占位符,后面的(id=$ ...