emmm原谅我确实是找不到不用缩点的tarjan题才会想到自学一下缩点这个东西的。。

题目没有,只能自己出数据并手动模拟。。。

首先看一张图(懒得画,还是看输入数据吧,劳烦自行画图。。)

7 9(n个点,m个关系,以下m行每一行为两个点a,b之间有a指向b的一条有向边)
1 2
2 3
3 1
3 4
4 5
4 7
7 5
6 7
6 5

在画过图之后,显然可知,1 2 3这3个节点在一个强连通分量中(如果不理解强连通分量自行度娘哦),将其缩点,并利用1 2 3结点的边关系将缩成的点与其他点融合,形成新的图。好的,那么只需要套一遍tarjan,将每个强连通分量内的点赋值为该强连通分量的编号,再利用新的链式前向星存储新的图,已达到缩点的功效

 #include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<cmath>
#include<ctime>
#include<vector>
#include<bitset>
#include<memory>
#include<utility>
#include<cstdio>
#include<sstream>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=; stack <int> q;
int tot,n,m,num;
int head[N],next[N],to[N],head2[N],next2[N],to2[N],dfn[N],low[N],f[N];//后缀为2的记录的是缩点后所得图的信息
bool visit[N]; inline int mi(int a,int b){return a<b?a:b;}
inline int ma(int a,int b){return a>b?a:b;} inline void add(int u,int v){//对读入的数据进行处理
next[++tot]=head[u];
head[u]=tot;
to[tot]=v;
} inline void add2(int u,int v){//对缩点后的数据进行处理
next2[++tot]=head2[u];
head2[u]=tot;
to2[tot]=v;
} void tarjan(int u){//tarjan板子
dfn[u]=low[u]=++tot;
visit[u]=;
q.push(u);
for(int i=head[u];i;i=next[i]){
if(!dfn[to[i]]){
tarjan(to[i]);
low[u]=mi(low[u],low[to[i]]);
}
else if(visit[to[i]]){
low[u]=mi(low[u],low[to[i]]);
}
}
if(dfn[u]==low[u]){
int v;
num++;
do{
v=q.top();
q.pop();
visit[v]=;
f[v]=num;//记录v节点存在的强连通分量编号
}while(v!=u&&!q.empty());
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
}
tot=;
for(int i=;i<=n;i++){
if(!dfn[i]){
tarjan(i);
}
}
tot=;
for(int i=;i<=n;i++){
for(int j=head[i];j;j=next[j]){
if(f[i]!=f[to[j]]){//去除在同一强连通分量的节点情况
add2(f[i],f[to[j]]);
}
}
}
return ;
}

那着就是缩点了,我个人感觉并不是很困难

tarjan缩点相关知识及代码的更多相关文章

  1. 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

    洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...

  2. angular自定义指令相关知识及代码

    原文地址 https://www.jianshu.com/p/0c015862156d 大纲 1.自定义指令之——属性指令 2.自定义属性指令的运行原理 3.自定义属性指令代码实践 4.自定义结构指令 ...

  3. 代码编辑器[0] -> Vim/gVim[2] -> Vim 的相关知识

    相关知识 / Relevant Knowledge 1 _vimrc编程 / _vimrc Program 1. 注释符", 用于注释 2. 关键词set, 用于设置功能等 3. 关键词im ...

  4. Tarjan缩点【p1726】上白泽慧音

    Description 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的 ...

  5. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  6. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  7. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  8. hihoCoder 1185 连通性·三(Tarjan缩点+暴力DFS)

    #1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...

  9. POJ 1236 Network of Schools(Tarjan缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16806   Accepted: 66 ...

随机推荐

  1. k8sDeployment控制器

    简写为deploy,是k8s控制器的另一种实现,它构建于ReplicaSet之上,可为pod和rs资源提供声明式更新. deploy控制器资源的大部分功能均可通过调用rs来实现,同时,还增添了部分特性 ...

  2. PowerDesigner 生成SQL Server 2005 注释脚本

    --生成数据表的注释EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=[%R%?[N]]%.q:COMMENT% , @l ...

  3. Linux——awk

    https://blog.csdn.net/jin970505/article/details/79056457 可以根据特定规则输出文本文件内容

  4. linux7buffer和cache

    现象:作为hdfs集群的主节点,越来越卡 排查:CPU,mem CPU正常,检查内存情况,发现如下 如上截图:发现程序可用内存为91G,但是部分swap分区被占用.于是引出如下思考,free -h这条 ...

  5. React native 之 图标库ECharts的使用

    github地址:https://github.com/somonus/react-native-echarts 官网:https://www.echartsjs.com/zh/tutorial.ht ...

  6. OpenCV笔记(6)(harris角点检测、背景建模)

    一.Harris角点 如上图所示,红色框AB都是平面,蓝色框CD都是边缘,而绿色框EF就是角点. 平面:框往X或Y抽移动,变化都很小. 边缘:框沿X或Y轴移动,其中一个变化很小,而另外一个变化比较大. ...

  7. 什么是JavaScript循环结构?

    ㈠什么是循环结构 ⑴什么是循环? 反复一遍又一遍的做着相同(相似)的事情 ⑵循环中的两大要素 ①循环条件:什么时候开始,什么时候结束 ②循环操作:循环体,循环过程中,干了什么 ㈡循环结构—while循 ...

  8. java文件上传下载解决方案

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

  9. C++ - extern “C”含义深层探索

    C和C++函数的相互引用原文地址:http://blog.csdn.net/wfwd/archive/2006/05/30/763734.aspx=========================== ...

  10. [模板] 计算几何2: 自适应Simpson/凸包/半平面交/旋转卡壳/闵可夫斯基和

    一些基本的定义在这里: [模板] 计算几何1(基础): 点/向量/线/圆/多边形/其他运算 自适应Simpson Simpson's Rule: \[ \int ^b_a f(x)dx\approx ...