迷宫城堡

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

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
 
Author
Gardon
 
Source
 
分析:
初识强连通分量题,采用tarjan算法出力强连通分量问题
参考的是该大佬博客:
 
题目分析:两两点之间互相可达,即判断该图的强连通分量是不是一个的问题
code:
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<set>
#include<map>
#include<list>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long LL;
int mon1[]= {,,,,,,,,,,,,};
int mon2[]= {,,,,,,,,,,,,};
int dir[][]= {{,},{,-},{,},{-,}}; int getval()
{
int ret();
char c;
while((c=getchar())==' '||c=='\n'||c=='\r');
ret=c-'';
while((c=getchar())!=' '&&c!='\n'&&c!='\r')
ret=ret*+c-'';
return ret;
} #define max_v 10005
vector<int> vv[max_v];
int vis[max_v];
int dfn[max_v];
int low[max_v];
int ans[max_v];
int n,m,cnt,sig; void init()
{
memset(low,,sizeof(vis));
memset(dfn,,sizeof(dfn));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
vv[i].clear();
} void tarjan(int u)
{
vis[u]=;
dfn[u]=low[u]=cnt++;
for(int i=;i<vv[u].size();i++)
{
int v=vv[u][i];
if(vis[v]==)
tarjan(v);
if(vis[v]==)
low[u]=min(low[u],low[v]);
}
if(dfn[u]==low[u])
{
sig++;
}
} void slove()
{
cnt=;
sig=;
for(int i=;i<=n;i++)
{
if(vis[i]==)
{
tarjan(i);
}
}
} int main()
{
while(~scanf("%d %d",&n,&m))
{
if(n==&&m==)
break;
init();
int x,y;
for(int i=;i<=m;i++)
{
scanf("%d %d",&x,&y);
if(count(vv[x].begin(),vv[x].end(),y)==)
vv[x].push_back(y);
}
slove();
if(sig==)
printf("Yes\n");
else
printf("No\n");
}
return ;
}
/*
判断该图是不是强连通图,即强连通分量只有一个,就是它自己
*/
 

最新文章

  1. [unity]UGUI界面滑动,ScrollRect嵌套滑动
  2. 构建自己的PHP框架--构建缓存组件(2)
  3. ionic实现上拉到底内容提示
  4. javascript - 事件详解
  5. CSS里的pointer-events属性
  6. 参加:白帽子活动-赠三星(SAMSUNG) PRO....
  7. js 当前日期处理 获取
  8. JavaScript如何判断参数为浮点型
  9. (转载)直接用SQL语句把DBF导入SQLServer
  10. poj 2503 快排+二分
  11. iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
  12. 设计模式笔记之三:Android DataBinding库(MVVM设计模式)
  13. Spark入门实战
  14. Python 科学计算-介绍
  15. ORACLE创建表空间 新建用户 授权
  16. nc高级应用
  17. 【C++】:STL迭代器使用---[容器::iterator iter;]
  18. oracle 学习blogs
  19. 基于resteasy,Base64码上传文件
  20. Java基础知识:Java实现Map集合二级联动1

热门文章

  1. APP中内嵌H5页面为什么不能下载?
  2. Codeforces Round #545 (Div. 1) 简要题解
  3. mongodb基础环境搭建
  4. Nginx的程序架构优化
  5. 单元测试(四)-隔离框架NSubstitute
  6. AOP编程 - 淘宝京东网络处理
  7. eclipse代码中每行的开始和结尾出现多余的特殊符号
  8. 反射式DLL注入--方法
  9. SQL Server全文搜索
  10. 为何SQL SERVER使用sa账号登录还原数据库BAK文件失败,但是使用windows登录就可以