迷宫城堡

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5730    Accepted Submission(s): 2542

Problem Description
为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。
 
Input
输入包含多组数据,输入的第一行有两个数:N和M,接下来的M行每行有两个数a和b,表示了一条通道可以从A房间来到B房间。文件最后以两个0结束。
 
Output
对于输入的每组数据,如果任意两个房间都是相互连接的,输出"Yes",否则输出"No"。
 
Sample Input
3 3
1 2
2 3
3 1
3 3
1 2
2 3
3 2
0 0
 
Sample Output
Yes No
 
思路:这是图的强连通性问题的裸题,入门题,我用的是Kosaraju算法:
    1.从第一个点开始对全图进行第一次深度优先搜索 DFS1(),形成一棵树或者森林;
    2.按照DFS1()回溯时点的顺序对反图进行第二次深度优先搜索DFS2(),形成一棵树或者森林;
因此在DFS1()时必须记录点被搜索的先后顺序!
对全图进行了两次DFS之后就可以知道图的强连通性,求得强连通分量,若分量个数为1,说明图是一个强连通图。
AC代码:
 //*************************************************************************//
// Author: wangzhili
// Mail: wangstdio.h@gmail.com
// Filename: qlt.c
// Last modified: 2013-12-04 21:19
//*************************************************************************// #include<stdio.h>
#include<string.h>
typedef struct
{
int to;
int next;
}EdgeNode;
EdgeNode edge[],redge[];
int head[],rhead[];
int vis[];
int t[];
int cnt;
void creatmap(int a,int b,int i)
{
edge[i].to = b;
edge[i].next = head[a];
head[a] = i;
redge[i].to = a;
redge[i].next = rhead[b];
rhead[b] = i;
} void dfsone(int v)
{
int j;
vis[v] = ;
for(j = head[v];j != -;j = edge[j].next)
{
if(!vis[edge[j].to])
dfsone(edge[j].to);
}
t[++cnt] = v;
} void dfstwo(int v)
{
int j;
vis[v] = ;
for(j = rhead[v];j != -;j = redge[j].next)
{
if(!vis[redge[j].to])
dfstwo(redge[j].to);
}
} int main()
{
int n,m,i,j;
int a,b;
//freopen("/home/acmer/桌面/in.c","r",stdin);
while(~scanf("%d%d",&n,&m) && (m+n))
{
cnt = ;
memset(head,-,sizeof(head));
memset(rhead,-,sizeof(redge));
memset(vis,,sizeof(vis));
memset(t,,sizeof(t));
for(i = ;i < m;i ++)
{
scanf("%d%d",&a,&b);
creatmap(a,b,i);
}
for(i = ;i <= n;i ++)
{
if(!vis[i])
dfsone(i);
}
memset(vis,,sizeof(vis));
cnt = ;
for(i = n;i >= ;i --)
{
if(!vis[t[i]])
{
dfstwo(t[i]);
cnt++;
}
}
if(cnt == )
printf("Yes\n");
else
printf("No\n");
}
return ;
}
 
 
 

迷宫城堡--HDOJ 1269的更多相关文章

  1. 迷宫城堡--HDOJ 1269(Tarjan)

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

  2. 迷宫城堡 HDU - 1269 判断有向图是否是强连通图

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

  3. HDU 1269 迷宫城堡(强连通)

    HDU 1269 迷宫城堡 pid=1269" target="_blank" style="">题目链接 题意:中文题 思路:强连通模板题 代 ...

  4. hdoj 1269 迷宫城堡【scc基础题目】

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

  5. hdu 1269 迷宫城堡

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...

  6. HDUOJ ---1269迷宫城堡

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

  7. hdu 1269 迷宫城堡 强连通分量

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

  8. HDU 1269 迷宫城堡(DFS)

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

  9. HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)

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

随机推荐

  1. 【转】iOS开发——基本常识篇&各种控件默认高度

    原文:http://www.cnblogs.com/iCocos/p/4595614.html 各种控件默认高度   1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注 ...

  2. C#中运用事件实现异步调用

    问题引出: winform程序中的耗时操作,一般不能在UI线程中执行,需要另开线程.往往我们需要在耗时操作结束后将结果显示在UI上. 以下是Mainform.cs中调用耗时操作的一段代码: Job j ...

  3. 【转帖】客户端通过 HTTP 请求和响应 的 Header 信息总结

    请求Header原帖地址:http://technique-digest.iteye.com/blog/1174581 响应Header原帖地址:http://blog.pfan.cn/hurongl ...

  4. ASP.NET缓存 Cache

    缓存介绍 如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差,而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能,这样无论多 ...

  5. 包管理器Bower使用手册之一

    包管理器Bower使用手册之一 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Bower介绍 Bower是一个适合Web应用的包管理器,它擅长前端的 ...

  6. LFS实践

    用了三天,编译了两次LFS,把LFS的基本流程和原理都弄清了.用的是LFS 6.3,使用的教程是LFS速成手册(6.3) ,感觉很不错,如果按照它的做法,一步一步来,基本都能编译成功而且没什么错误.不 ...

  7. C++ 11 笔记 (三) : auto

    我真的不是标题党... 虽然大一上学期学C语言基础时就学了auto关键字了,而且还是跟static和register两个关键字打包学的,但是.. 猜的没错,C++11这货又给auto加新功能了,在 C ...

  8. 二师兄VPN加速器

    http://www.2-vpn2.org/home.action?ic=B003CC4C47

  9. Discuz帖子列表页无法ajax加载下一页问题

    上周末抽空重构了一下JX3PVE的PVE栏目,只上线了宏库栏目,结果出了一堆Bug.奈何公司这段时间都在搞完美假期这专题,太忙也没去处理.这不是周末拿时间来看一下. 发现其中有一个是点“下一页”aja ...

  10. mysql 时间字段的函数 timestamp

    Mysql 里格式 时间字段的函数 DATE_FORMAT unix_timestamp - 墨墨修行的日志 - 网易博客http://jjuanxi.blog.163.com/blog/static ...