#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<vector>
using namespace std; const int maxn = ;
const int maxm = ;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-; struct Edge{
int u,v,next;
}edge[ maxn*maxn ];
int cnt,head[ maxn ];
int vis[ maxn ],belong[ maxn ];
stack<int>s;
int dfn[ maxn ],low[ maxn ];
int Cnt ,id ; void init(){
while( !s.empty() )
s.pop();
Cnt = ;
id = ;
memset( dfn,-,sizeof( dfn ) );
memset( low,-,sizeof( low ) );
cnt = ;
memset( head,-,sizeof( head ) );
} void addedge( int a,int b ){
edge[ cnt ].u = a;
edge[ cnt ].v = b;
edge[ cnt ].next = head[ a ];
head[ a ] = cnt++;
} void tarjan( int cur ){
dfn[ cur ] = low[ cur ] = id++;
vis[ cur ] = ;
s.push( cur );
for( int i=head[ cur ];i!=-;i=edge[i].next ){
int nxt = edge[i].v;
if( dfn[ nxt ]==- ){
tarjan( nxt );
low[ cur ] = min( low[ nxt ],low[ cur ] );
}
else if( vis[ nxt ]== ){
low[ cur ] = min( dfn[ nxt ],low[ cur ] );
}
}
if( dfn[ cur ]==low[ cur ] ){
Cnt ++;
while( ){
int tmp = s.top();
s.pop();
vis[ tmp ] = ;
belong[ tmp ] = Cnt;
if( tmp==cur ) break;
}
}
} int main(){
int n,m;
while( scanf("%d%d",&n,&m)== ){
int a,b;
init();
while( m-- ){
scanf("%d%d",&a,&b);
addedge( a,b );
}
for( int i=;i<=n;i++ ){
if( dfn[i]==- ){
tarjan( i );
}
}
printf("缩点 = %d\n",Cnt);
}
return ;
}

Tarjan+模板的更多相关文章

  1. 图论算法-Tarjan模板 【缩点;割顶;双连通分量】

    图论算法-Tarjan模板 [缩点:割顶:双连通分量] 为小伙伴们总结的Tarjan三大算法 Tarjan缩点(求强连通分量) int n; int low[100010],dfn[100010]; ...

  2. UOJ #146. 【NOIP2015】信息传递 连通分量 tarjan模板题

    http://uoj.ac/problem/146 题解:强连通分量 tarjan模板题.同时试了一下codeblock #include<bits/stdc++.h> using nam ...

  3. 学渣乱搞系列之Tarjan模板合集

    学渣乱搞系列之Tarjan模板合集 by 狂徒归来 一.求强连通子图 #include <iostream> #include <cstdio> #include <cs ...

  4. 洛谷1726 上白泽慧音 tarjan模板

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

  5. 算法问题实战策略 MEETINGROOM 附一份tarjan模板

    地址 https://algospot.com/judge/problem/read/MEETINGROOM 解答  2-sat 代码样例过了 没有ac. 我又没有正确代码对拍..... 已确认是输出 ...

  6. POJ 2186:Popular Cows Tarjan模板题

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25945   Accepted: 10612 De ...

  7. tarjan模板

    tarjan #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring& ...

  8. Tarjan 模板,高级并查集

    第一个模板有误!!!! 请见谅!!! 要怪就怪HDU吧,竟然让我过了 第二个模板是正确的.请翻到下面看更新 HDU 1269 评论区居然有人说用并查集过了,其实回想一下 求无向图的连通分量,就是并查集 ...

  9. 强连通分量(Tarjan)模板

    贴模板,备忘. 模板1: #include<iostream> #include<cstring> #include<cmath> #include<cstd ...

  10. HDU:1269-迷宫城堡(tarjan模板)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Descri ...

随机推荐

  1. android 安装包签名问题探究

    1.首先先科普一下,android为什么需要给安装包签名: 所有的Android应用程序在发布之前都要求开发人员用一个证书进行数字签名,anroid系统不会安装没有进行签名的由于程序.    平时我们 ...

  2. 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏  ...

  3. C#--格式化数值数据

    如果数值数据需要更精细的格式化,每一个占位符都可以包含不同的格式字符,下表展示了核心格式化选项.   下面用一个例子来说明. namespace LearningCSharp { class Prog ...

  4. css 笔记——设置禁用中文输入法

    ime-mode ime-mode的语法解释如下: ime-mode : auto | active | inactive | disabled 取值: auto  : 默认值.不影响IME的状态.与 ...

  5. java计算过G文件md5 值计算

    package io.bigdata; import java.io.File; import java.io.FileInputStream; import java.io.IOException; ...

  6. JQuery 判断某个属性是否存在 hasAttr

    $(".fengye a").each(function () { if (typeof($(this).attr("href")) != "unde ...

  7. WinForm多线程及委托防止界面假死

    当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决. using System; using System.Collections.Generi ...

  8. winfrom 水晶按钮

    闲来无事,从网上找了不少自定义控件,然后整理了一下,做了一个水晶按钮 /// <summary> /// 表示 Windows 的按钮控 /// </summary> [Des ...

  9. 为什么Facebook要将视频从Flash全面迁移到HTML5?

    英文原文:Why we chose to move to HTML5 video 编者按:Facebook 前端高级工程师 Daniel Baulig 解释了 Facebook 为什么要将视频全面迁移 ...

  10. Jquery get parameter value

    http://www.sitepoint.com/url-parameters-jquery/ $.urlParam('id') ==> $.urlParam = function(name){ ...