强连通tarjan模版
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<queue>
#include<vector>
#include<string.h>
#include<algorithm>
#include<stack> #define N 1000
#define INF64 1152921504606846976
#define INF32 2147483647
#define ll int
using namespace std; vector<int>G[N],Tarjan[N];//Tarjan从0开始存下所有的强连通,其大小用 tar记录,注意分量中只有一个点时,则不连通(Tarjan[tar]<2 则应该为0 )
stack<int>mystack;
int n,m,tar;
int DFN[N],Low[N],Time;// 小写的time会redeclared
bool instack[N],vis[N]; inline ll Max(ll a,ll b){return a>b?a:b;}
inline ll Min(ll a,ll b){return a<b?a:b;} void tarjan(int u){
int v;
DFN[u]=Low[u]=++Time;
mystack.push(u); instack[u]=true;
vis[u]=true;
for(int i=0;i<G[u].size();i++)//遍历u的所有子节点
{
v=G[u][i];
if(!DFN[v])
{
tarjan(v);
Low[u]=Min(Low[u],Low[v]);
}
else if(instack[v])
Low[u]=Min(Low[u],DFN[v]);
}
if(DFN[u]==Low[u])
{
do
{
v=mystack.top(); mystack.pop(); instack[v]=false;
Tarjan[tar].push_back(v);
}while(u!=v);
tar++;
}
}
void InitTar(){
memset(DFN,0,sizeof(DFN)); memset(Low,0,sizeof(Low));
memset(instack,0,sizeof(instack));
memset(vis,0,sizeof(vis));//标记已搜过的点
while(!mystack.empty())mystack.pop();
for(int i=0;i<n;i++)Tarjan[i].clear();
tar=Time=0;
}
int main(){
int i,j;
while(~scanf("%d%d",&n,&m)){
for(i=0;i<n;i++)G[i].clear();
while(m--)
{
int u,v; scanf("%d %d",&u,&v);
G[u].push_back(v);
}
InitTar();
for(j=0;j<n;j++)//可能图是不连通的,所以枚举所有未去过的点
if(!vis[j]) tarjan(j);
}
return 0;
}
强连通tarjan模版的更多相关文章
- POJ 1236 Network of Schools(强连通 Tarjan+缩点)
POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意: 给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...
- Tarjan模版(链式向前星表示方法)
这道模版用到了链式向前星表示法: struct node { int v,next; }edge[]; void add(int x,int y) { edge[++cnt].next=heads[x ...
- PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)
1008. Airline Routes (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a ...
- HDOJ迷宫城堡(判断强连通 tarjan算法)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- HDU 1269 迷宫城堡(向量)(Tarjan模版题)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- CF:Problem 427C - Checkposts强连通 Tarjan算法
tarjan算法第一题 喷我一脸. ...把手写栈的类型开成了BOOL.一直在找错.. . #include<cstdio> #include<cstring> #includ ...
- 【算法•日更•第二十八期】图论:强连通+Tarjan算法(一)
▎前言 一直都想学习这个东西,以为很难,结果发现也不过如此. 只要会些图论的基础就可以了. ▎强连通 ☞『定义』 既然叫强连通,那么一定具有很强的连通性. 强连通:就是指在一个有向图中,两个顶点可以互 ...
- hdu3594 强连通 tarjan
题意: 判断是不是强连通图 ,同时每一条边必须只能在一个环里 思路:之前我的强连通用的全是双深搜,结果题目的第二个要求很难判断,一开始写了三个深搜加上并查集,结果越写越乱,其实就是在判断一个边是否只在 ...
- hdu1269迷宫城堡 (强连通Tarjan+邻接表)
Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说 ...
随机推荐
- Web2.0应用程序的7条原则
个人看好Web的发展潜力,本文字摘自<Collective Intelligence 实战> 网络是平台 使用传统许可模式软件的公司或用户必须运行软件.定期更新至最新版本,以及扩展它来满足 ...
- [BZOJ5298][CQOI2018]交错序列(DP+矩阵乘法)
https://blog.csdn.net/dream_maker_yk/article/details/80377490 斯特林数有时并没有用. #include<cstdio> #in ...
- 课堂练习—hash
课堂练习-hash 要求: 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85,75,57,60,6 ...
- NOIP 算法模板
Hash: #include <iostream> #include <cstdio> #include <cstdlib> #include <algori ...
- JQ中get()与eq()的区别
.eq() : 减少匹配元素的集合,根据index索引值,精确指定索引对象. .get() : 通过检索匹配jQuery对象得到对应的DOM元素. 同样是返回元素,那么eq与get有什么区别呢? eq ...
- asp.net 判断日期是否为空
if (Birthday == DateTime.MinValue) { //u can do something here } 首先确保Birthday是不可为null的日期类型.如果可为null就 ...
- Git_删除文件
在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: $ git add test.txt $ git commit -m "add test. ...
- adb root : adbd cannot run as root in production builds
在有些android手机上使用adb root希望获取root权限时出现如下提示信息:adbd cannot run as root in production builds.此时提升root权限的方 ...
- Digital Adjustment of DC-DC Converter Output Voltage in Portable Applications
http://pdfserv.maximintegrated.com/en/an/AN818.pdf http://www.maximintegrated.com/app-notes/index.mv ...
- Save a 32-bit Bitmap as 1-bit .bmp file in C#
What is the easiest way to convert and save a 32-bit Bitmap to a 1-bit (black/white) .bmp file in C# ...