HDU2767Proving Equivalences tarjan缩点,如何求入度和出度最大值
给定一个有向图,问最少增加多少条边后变成强连通图
tarjan求求强连通分量并缩点,如果强连通分量个数为1,则需要边数为0,
否则为缩点后点入度和出度的最大值,
证明:当入度或者出度不为0时,则可以通过传递性使其相同,所以只需要考虑入度或者出度为0的点
即可。因为要求增加尽量少的边,所以将入度和出度都为0的点相连,边的方向为出度为0的指向入度为0的顶点。
当入度为0或者出度为0的点有剩余时,则任意取一个点进行连边。
所以当有向图为强连通图时答案为0,否则最小值为入度和入度的最大值
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 20005;
const int maxm = 100005;
struct node{
int v,next;
}edge[maxm];
int head[maxn],low[maxn],dfn[maxn],sta[maxn],in[maxn],out[maxn],belong[maxn],vis[maxm];
int Time,id,top,num,total;
void add_edge(int u,int v){
edge[id].v = v;edge[id].next = head[u];head[u] = id++;
}
void tarjan(int u){
low[u] = dfn[u] = ++Time;
sta[top++] = u;in[u] = 1;
for(int id = head[u]; id != -1; id = edge[id].next){
int v = edge[id].v;
if(!dfn[v]){
tarjan(v);
if( low[u] < low[v])total++;
low[u] = min(low[u],low[v]);
}
else if( in[v] )low[u] = min(low[u],low[v]);
}
if( low[u] == dfn[u]){
num ++;
do{
int t = sta[--top];
in[t] = 0;
belong[t] = num;
}while( sta[top] != u);
}
}
int main(){ int t;
int n,m;
int u,v;
int cnt;
scanf("%d",&t);
while( t-- ){
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head)),id = 0;
while( m-- ){
scanf("%d%d",&u,&v);
add_edge(u,v);
}
memset(dfn,0,sizeof(dfn));
Time = num = total = cnt = 0;
for(int i = 1; i <= n;i++){
if(!dfn[i])
tarjan(i);
}
if( num == 1){puts("0");continue;}
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
for(int u = 1; u <= n; u++){
for(int id = head[u]; id != -1; id = edge[id].next){
int v = edge[id].v;
if( belong[u] != belong[v]){
in[belong[v]]++;out[belong[u]]++;
}
}
}
int indeg = 0,outdeg = 0;
for(int i = 1; i <= num; i++){
if( !in[i])indeg ++;
if( !out[i])outdeg++;
}
printf("%d\n",indeg > outdeg ? indeg : outdeg);
}
return 0;
}
HDU2767Proving Equivalences tarjan缩点,如何求入度和出度最大值的更多相关文章
- 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路
题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...
- HDU4612+Tarjan缩点+BFS求树的直径
tarjan+缩点+树的直径题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少.先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. /* tarjan ...
- LG2272/BZOJ1093 「ZJOI2007」最大半连通子图 Tarjan缩点+DAG求最长链
问题描述 LG2272 BZOJ1093 题解 观察半联通的定义,发现图中的一些结点,构成的链一定是一个半联通子图. 此时存在的环可能会干扰求解,于是\(\mathrm{Tarjan}\)缩点. 于是 ...
- hdu2767 Proving Equivalences Tarjan缩点
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- Tarjan缩点求入度为零的点的个数问题
Description: 一堆人需要联系,但如果x 可以联系 y,你联系了x就不用联系y了,你联系一个人都会有固定的花费,问你最小联系多少人,和最小花费 Solution: Tarjan缩点,求出缩点 ...
- HDU 2767 Proving Equivalences(强连通 Tarjan+缩点)
Consider the following exercise, found in a generic linear algebra textbook. Let A be an n × n matri ...
- P2746 [USACO5.3]校园网Network of Schools tarjan 缩点
题意 给出一个有向图,A任务:求最少需要从几个点送入信息,使得信息可以通过有向图走遍每一个点B任务:求最少需要加入几条边,使得有向图是一个强联通分量 思路 任务A,比较好想,可以通过tarjan缩点, ...
- tarjan 缩点 + 几道例题
tarjan 缩点 + 几道例题 tarjan 模板 #include <iostream> #include <string.h> using namespace std; ...
- P2341 [HAOI2006]受欢迎的牛(tarjan+缩点)
P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的 ...
随机推荐
- js里的Document对象介绍
activeElement 返回代表文档中dangqianhuodejiaodianyuansudeduixaing body 返回代表文档中body元素 ...
- 【Android】Error:Execution failed for task ':app:lint'
详细信息如下: Error:Execution failed for task ':app:lint'. > Lint found errors in the project; aborting ...
- maven添加oracle驱动包
问题描述 项目用到了oracle,但由于oracle商业版权问题,maven在中心资源库直接下载jar包是要收费的 解决方法 第一步: 下载ojdbc6.jar 第二步: 将下载的jar放入项目的li ...
- java并发程序和共享对象实用策略
java并发程序和共享对象实用策略 在并发程序中使用和共享对象时,可以使用一些实用的策略,包括: 线程封闭 只读共享.共享的只读对象可以由多个线程并发访问,但任何线程都不能修改它.共享的只读对象包括不 ...
- MapReduce 运行全过程解析
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 前言 前面我们讲了 MapReduce 的编程模型,我们知道他主要分成两大阶段来完成一项任务,一是 m ...
- java基础精选题
Integer比较 看下面这段有意思的代码,对数字比较敏感的小伙伴有没有发现异常? public static void main(String[] args) { Integer a = 128,b ...
- oracle 创建表空间,用户并授权
1. 查看所有表空间及存储路径 select file_name, tablespace_name from dba_data_files; 2. 创建表空间 CREATE TABLESPACE xs ...
- 【游记】NOIP2018初赛
声明 本文最初的版本创建之时,本人甚至只是个电脑的小白,因而不太会用电脑编辑文字,最初的版本写在一个Word文档里,被随意的丢弃在我杂乱无比的网盘的某一个角落,直到我决定整理自己的成长历程,将散落的游 ...
- Opengl_入门学习分享和记录_02_渲染管线(一)顶点着色器&片段着色器
写在前面的废话:今天俺又来了哈哈,真的好棒棒! 今天的内容:之前我们大概描述了,我们自己定义的顶点坐标是如何被加载到GPU之中,并且介绍了顶点缓冲对象VBO用于管理这一块内存.今天开始详细分析它的具体 ...
- 鲜为人知的maven标签解说
目录 localRepository interactiveMode offline pluginGroups proxies servers mirrors profiles 使用场景 出现位置 激 ...