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. 2018年最佳JavaScript数据可视化和图表库

    现在有很多图表库,但哪一个最好用?这可能取决于许多因素,如业务需求,数据类型,图表本身的目的等等.在本文中,每个JavaScript图表库将与一些关键因素进行比较,包括图表类型,商业或免费和开源状态. ...

  2. 编程语言类别;运行Python程序的方式;变量和常量;Python程序的垃圾回收机制;

    目录 编程语言分类 运行Python程序的两种方式 1.交互式 变量与常量 1.变量 2.常量 3.小整数池 垃圾回收机制 编程语言分类 编程语言分为: 1.机器语言:直接用二进制的0和1和计算机(C ...

  3. qt5--定时器

    定时器方式一:----定时器事件 需要     #include <QTimerEvent> #include "win.h" #include <QDebug& ...

  4. qt5---步长调节器SpinBox和QDoubleSpinBox

    #include <QSpinBox>            #include <QDoubleSpinBox> QSpinBox 用于整数的显示和输入,一般显示十进制数,也可 ...

  5. AOP xml 配置

    applicationContext.xml <!--切面Bean--> <bean id ="aspectbean" class='"con.soft ...

  6. Beyong Compare 2.4.10刷新剩余日期bat批处理文件

    @echo off % start )(window.close)&&exit REG DELETE "HKCU\Software\Scooter Software\Beyo ...

  7. 在spring官网上下载历史版本的spring插件,springsource-tool-suite

    目前spring官网(https://spring.io/tools3/sts/all)上可下载的spring插件只有: ECLIPSE ARCHIVE SIZE 4.9.0 springsource ...

  8. R_Studio模拟学生成绩对数据简单分析

    模拟产生学生名单,记录高数,英语,网站开发三科成绩,然后进行统计分析 假设有100名学生,起始学号为161304000,各科成绩取整 高数成绩为均匀分布随机函数,都在75分以上 英语成绩为正态分布,平 ...

  9. Linux-expect脚本-1

    expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 首行加上/usr/bin/expect spawn: 后面加上需要执行的shell命令,比如说spawn sudo ...

  10. windows 简单实用Elasticsearch

    官网下载地址:https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/zip/e ...