博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1629 迷宫城堡
阅读量:4695 次
发布时间:2019-06-09

本文共 1370 字,大约阅读时间需要 4 分钟。

传送门:

解题思路:

如果整个图只有一个连通分量输出“Yes”,其它就输出“NO”

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 9 const int MAXN=100010;10 const int MAXM=2000010;11 12 struct Edge{13 int to,next;14 }edges[MAXM];15 int head[MAXN],tot;16 17 void init(){18 memset(head,-1,sizeof(head));19 tot=0;20 }21 22 void addEdge(int u,int v){23 edges[tot].to=v;24 edges[tot].next=head[u];25 head[u]=tot++;26 }27 28 int DFN[MAXN],LOW[MAXN],Belong[MAXN],Stack[MAXN];29 int Index,top;30 int scc;31 bool Instack[MAXN];32 int num[MAXN];33 34 void Tarjan(int u){35 int v;36 LOW[u]=DFN[u]=++Index;37 Stack[top++]=u;38 Instack[u]=true;39 40 for(int i=head[u];i!=-1;i=edges[i].next){41 v=edges[i].to;42 43 if(!DFN[v]){44 Tarjan(v);45 if(LOW[u]>LOW[v]) LOW[u]=LOW[v];46 }else if(Instack[v]&&LOW[u]>DFN[v])47 LOW[u]=DFN[v];48 }49 50 if(LOW[u]==DFN[u]){51 scc++;52 53 do{54 v=Stack[--top];55 Instack[v]=false;56 num[scc]++;57 Belong[v]=scc;58 }while(v!=u);59 }60 }61 62 void solve(int N){63 memset(DFN,0,sizeof(DFN));64 memset(Instack,false,sizeof(Instack));65 memset(num,0,sizeof(num));66 67 Index=top=scc=0;68 69 for(int i=1;i<=N;i++){70 if(!DFN[i])71 Tarjan(i);72 }73 74 if(scc>1)75 cout<<"No"<

 

转载于:https://www.cnblogs.com/IKnowYou0/p/6531870.html

你可能感兴趣的文章
关于Tchar
查看>>
小白学习Spark系列三:RDD常用方法总结
查看>>
将jquery序列化转成对象的编码坑
查看>>
6.824 LAB1 环境搭建
查看>>
shell 脚本实战笔记(10)--spark集群脚本片段念念碎
查看>>
HDU - 3572 Task Schedule
查看>>
log4j2.xml的例子
查看>>
1004 四子连棋
查看>>
二、第一个C程序:Hello World!
查看>>
Ubuntu 编译 ARM-Linux-Gcc 工具链 -- 编译过程
查看>>
java url生成二维码保存到本地
查看>>
python platform模块
查看>>
Nginx
查看>>
leetcode133 - Clone Graph - medium
查看>>
Mybatis(一)入门
查看>>
DDR工作原理(转)
查看>>
(Frontend Newbie) Web三要素(一)
查看>>
(转载-学习)python wsgi 简介
查看>>
QPushButton 控制两种状态
查看>>
一点小基础
查看>>