HDOJ迷宫城堡(判断强连通 tarjan算法)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5400 Accepted Submission(s): 2411
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std; vector<int>edge[];//用邻接表存图;
int n,m;
int dfn[];//深度优先搜索访问次序,记录u第一次被访问的步数;
int low[];//能追溯到的最早的次序;
int st[];//tarjan中的栈;
int din; //索引号;
int num; //强连通分量个数;
int top; //栈中元素个数;
int in[];//是否在栈中; void tarjan(int u)
{
int i,j;
int v;
dfn[u] = low[u] = ++din;//为节点u设定访问序号;
in[u] = ;
st[++top] = u;//压入栈中
for(i = ; i < edge[u].size(); i++)//遍历与u相连的节点
{
v = edge[u][i];
if(!dfn[v])//如果节点v未被访问过
{
tarjan(v);//继续向下访问
low[u] = min(low[u],low[v]);
}
else if(in[v])//如果节点v已被访问过,并且已在栈中
{
low[u] = min(low[u],dfn[v]);
}
} if(dfn[u] == low[u])//如果节点u是强连通分量的根
{
num++;//连通分量数加1;
do
{
j = st[top--];
in[j] = ;
}
while(j != u);//将该强连通分量中的节点退栈,
} }
void init()
{
int i;
memset(dfn,,sizeof(dfn));
top = ;
num = ;
din = ;
for(i = ; i <= n; i++)
{
if(!dfn[i])
{
tarjan(i);
}
} }
int main()
{
int u,v;
while(~scanf("%d %d",&n,&m))
{
if(n == && m == )
break;
for(int i = ; i <= n; i++)
edge[i].clear();
while(m--)
{
scanf("%d %d",&u,&v);
edge[u].push_back(v);
}
init();
if(num == )
printf("Yes\n");
else printf("No\n");
}
return ;
}
实例代码
?
tarjan(u)
HDOJ迷宫城堡(判断强连通 tarjan算法)的更多相关文章
- hdu1269迷宫城堡(判断有向图是否是一个强连通图)
1 /* 题意: 给你一个图,求这个有向图示否是一个强连通图(每两个节点都是可以相互到达的)! 思路1:按正向边dfs一遍,将经过的节点计数,如果记录的节点的个数小于n,那么就说明图按照正向边就不是连 ...
- HDU 1269 迷宫城堡 (强连通分量,常规)
题意: 判断所给的有向图是否是一个强连通图. 思路: 如果连通分量大于1则必定No,如果强连通分量大于1也是No.tarjan算法求强连通分量. #include <cstdio> #in ...
- 【算法•日更•第二十八期】图论:强连通+Tarjan算法(一)
▎前言 一直都想学习这个东西,以为很难,结果发现也不过如此. 只要会些图论的基础就可以了. ▎强连通 ☞『定义』 既然叫强连通,那么一定具有很强的连通性. 强连通:就是指在一个有向图中,两个顶点可以互 ...
- HDU 1269 迷宫城堡(强连通)
HDU 1269 迷宫城堡 pid=1269" target="_blank" style="">题目链接 题意:中文题 思路:强连通模板题 代 ...
- CF:Problem 427C - Checkposts强连通 Tarjan算法
tarjan算法第一题 喷我一脸. ...把手写栈的类型开成了BOOL.一直在找错.. . #include<cstdio> #include<cstring> #includ ...
- HDU 1269:迷宫城堡(强连通)
http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:确定是否是一个强连通图. 思路:裸的tarjan算法. #include <cstdio> ...
- HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1269 迷宫城堡 tarjan算法求强连通分量
基础模板题,应用tarjan算法求有向图的强连通分量,tarjan在此处的实现方法为:使用栈储存已经访问过的点,当访问的点离开dfs的时候,判断这个点的low值是否等于它的出生日期dfn值,如果相等, ...
- 【强联通图 | 强联通分量】HDU 1269 迷宫城堡 【Kosaraju或Tarjan算法】
为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明 ...
随机推荐
- CentOS安装memcached及配置php的memcache扩展
遇到的问题: 这个问题主要是linux服务器安装memcached服务后,phpinfo信息没有memcache扩展,所以主要是给php安装memcache扩展,教程中是安装memcache扩展,我认 ...
- IDEA 13》》》14破解
更新IDEA 15注册方式 http://15.idea.lanyus.com/ ------------------------------------------------ 之前的已不能用,下面 ...
- There is no ID/IDREF binding for IDREF
http://blog.csdn.net/greensurfer/article/details/7596219
- vim备注
① 用户path生效 在~/.bashrc中修改path,在~/.profile中source bashrc ② secureCRT着色方案 底色RGB:43 43 43 前景色RGB:221 221 ...
- 【转】 iOS KVO KVC
原文: http://www.cocoachina.com/industry/20140224/7866.html Key Value Coding Key Value Coding是cocoa的一个 ...
- iOS socket编程
// // ViewController.m // socket // // Created by emerys on 16/3/2. // Copyright © 2016年 Emerys. All ...
- iOS支付 IPAPayment demo iTunes Conection里面添加测试帐号,添加商品,实现购买过程
https://github.com/ccguo/IAPPaymentDemo 发一个demo
- 258. Add Digits(C++)
258. Add Digits Given a non-negative integer num, repeatedly add all its digits until the result has ...
- C++前置++与后置++的区别与重载
++属于单目运算符,前置与后置的实现代码不一样,下面以整数自增为例: // 前置++,返回自增后的值,且返回的是一个左值 int& operator++(){ *this += 1; retu ...
- Jquery实现图片左右滚动(自动)
<!DOCTYPE HTML><html><head><title>基于jQuery的控制左右滚动效果_自动滚动版本</title>< ...