1
/*
题意: 给你一个图,求这个有向图示否是一个强连通图(每两个节点都是可以相互到达的)!
思路1:按正向边dfs一遍,将经过的节点计数,如果记录的节点的个数小于n,那么就说明图按照正向边就不是连同的,所以就不是强连通图!
然后按照反向边再进行另一个dfs,同样对经过的节点的个数进行计数,如果个数==n则说明正向遍历和反响遍历都是连通的!那么整个图就是强连通的图! 思路2:直接套用tarjan算法,求出每一个节点所对应的缩点的值, 如果缩点的个数==1,那么证明就会只有一个强连通分量!也就是强连通图 思路3:多次次调用tarjan算法,判断low[u]==pre[u]&&u==1, 如果不满足说明改图有多个缩点,那就不是强连通图!下图说明一下....


     */
//思路一:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define N 10005
using namespace std; vector<int>uv[N];
vector<int>vu[N]; int vis[N]; int cnt; int n, m; void dfs1(int u){
vis[u]=1;
++cnt;
int len=uv[u].size();
for(int i=0; i<len; ++i){
int v=uv[u][i];
if(!vis[v])
dfs1(v);
}
} void dfs2(int v){
vis[v]=1;
++cnt;
int len=vu[v].size();
for(int i=0; i<len; ++i){
int u=vu[v][i];
if(!vis[u])
dfs2(u);
}
} int main(){
while( scanf("%d%d", &n, &m) && (n||m) ){
memset(vis, 0, sizeof(vis));
for(int i=1; i<=n; ++i){
uv[i].clear();
vu[i].clear();
}
while(m--){
int u, v;
scanf("%d%d", &u, &v);
uv[u].push_back(v);
vu[v].push_back(u);
}
cnt=0;
dfs1(1); if(cnt==n){
memset(vis, 0, sizeof(vis));
cnt=0;
dfs2(1);
if(cnt!=n)
printf("No\n");
else printf("Yes\n");
}
else printf("No\n"); }
return 0;
}
 //思路二:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<stack>
#define N 10005
using namespace std; vector<int>g[N];
stack<int>s;
int pre[N], low[N];
int scc[N];
int scc_cnt;
int dfs_clock; void tarjans(int u){
pre[u]=low[u]=++dfs_clock;
s.push(u);
int len=g[u].size();
for(int i=; i<len; ++i){
int v=g[u][i];
if(pre[u]>pre[v]){
if(!pre[v]){
tarjans(v);
low[u]=min(low[v], low[u]);
}
else
low[u]=min(pre[v], low[u]);
}
} if(low[u]==pre[u]){
++scc_cnt;
while(){
int x=s.top();
s.pop();
scc[x]=scc_cnt;
if(x==u) break;
}
}
} int n, m;
int main(){
while(scanf("%d%d", &n, &m) && (n||m)){
while(m--){
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
}
dfs_clock=;
scc_cnt=;
for(int i=; i<=n; ++i)
if(!scc[i])
tarjans(i);
int i;
for(i=; i<=n; ++i)
if(scc[i]!=scc[]){
printf("No\n");
break;
}
if(i>n) printf("Yes\n");
memset(pre, , sizeof(pre));
memset(low, , sizeof(low));
memset(scc, , sizeof(scc));
for(i=; i<=n; ++i)
g[i].clear();
}
return ;
}
 //思路三:
1 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define N 10005
using namespace std; vector<int>g[N];
bool flag;
int pre[N], low[N];
int dfs_clock; void tarjans(int u){
pre[u]=low[u]=++dfs_clock;
int len=g[u].size();
for(int i=; i<len; ++i){
int v=g[u][i];
if(!flag) return ;
if(pre[u]>pre[v]){
if(!pre[v]){
tarjans(v);
low[u]=min(low[v], low[u]);
}
else
low[u]=min(pre[v], low[u]);
}
} if(low[u]==pre[u] && u!=)
flag=false;
} int n, m;
int main(){
while(scanf("%d%d", &n, &m) && (n||m)){
while(m--){
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
}
dfs_clock=;
flag=true;
for(int i=; i<=n; ++i)
if(!pre[i]){
if(!flag) break;
tarjans(i);
} if(!flag) printf("No\n");
else printf("Yes\n");
memset(pre, , sizeof(pre));
memset(low, , sizeof(low));
for(int i=; i<=n; ++i)
g[i].clear();
}
return ;
}


hdu1269迷宫城堡(判断有向图是否是一个强连通图)的更多相关文章

  1. HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)

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

  2. HDOJ迷宫城堡(判断强连通 tarjan算法)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  3. HDU 1269 -- 迷宫城堡【有向图求SCC的数目 &amp;&amp; 模板】

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

  4. HDU1269 迷宫城堡 —— 强连通分量

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    M ...

  5. HDU-1269 迷宫城堡(连通分量)

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

  6. HDU1269 迷宫城堡 2016-07-24 13:47 84人阅读 评论(0) 收藏

    迷宫城堡 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的 ...

  7. HDU1269 迷宫城堡

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. hdu1269迷宫城堡 (强连通Tarjan+邻接表)

    Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说 ...

  9. HDU1269 迷宫城堡(裸强连通分量)

    Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A ...

随机推荐

  1. H5项目常见问题

    转自 https://github.com/FrontEndZQ/HTML5-FAQH5项目常见问题及注意事项 Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面//一.HTML页 ...

  2. android5.0 aosp编译记录(由于机器硬件原因,改为4.4.2编译通过)

    编译环境必须是64位系统啊,妥妥的又装了64位的ubuntu,虚拟机推荐server版本,不带x省性能…… 接着要装openjdk 1.7,记得更新一下系统的源,下面这个不错 deb http://m ...

  3. oracle常用语句总结

    一.用户管理类 1.创建用户: Create user username Identified by password Default tablespace tablespacename Tempor ...

  4. [CSDN转载]致C语言初学者—指针注意项

    在论坛里经常见到一些新人对指针提出一些问题,作为一个经历过许多错误后的新手,我想把自己的经历说出来,避免让后来人继续这样的错误.    在讲解指针之前,需要理解一下内存空间.内存是随机存取器,计算机上 ...

  5. Android前端人员与后台开发的撕逼(一)

    首先表明一下身份,本人是Android前端开发人员,本篇只做合理性探讨,不进行人身攻击: 其次希望各位大神进行点评!点评!点评! 我们讨论一下接口的两种返回方式,直接举例说明一下,假设书籍信息表有30 ...

  6. 轻量级MVC框架:Nancy学习

    一.认识Nancy 今天听讲关于Nancy框架的培训,被Nancy的易用性所吸引.故晚上回来梳理了一下知识. 什么是Nancy呢?如标题所述,Nancy是一个轻量级的独立的框架: Nancy 是一个轻 ...

  7. httpclient瓶颈

    问题现象: 1.系统异常,应用拒绝访问. 2.web容器线程爆满 问题分析: 1.数据库正常 2.日志信息没有异常 问题思考: 1.应用访问量突破顶峰. 2.应用在某处存在瓶颈 发现问题: 需要了解线 ...

  8. dojo/dom-geometry元素大小

    在进入源码分析前,我们先来点基础知识.下面这张图画的是元素的盒式模型,这个没有兼容性问题,有问题的是元素的宽高怎么算.以宽度为例,ff中 元素宽度=content宽度,而在ie中 元素宽度=conte ...

  9. [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标

    看TI的官网资料:http://www.st.com/web/en/catalog/sense_power/FM89/SC444/PF250725 一.初次接触关注的信息: 1.1.概述中的关键信息 ...

  10. jQuery的attr与prop

    jQuery1.6中新添加了一个prop方法,看起来和用起来都和attr方法一样,这两个方法有什么区别呢?这要从HTMl 的attribute与property区别说起,attr与prop正是这两个东 ...