hdu1269迷宫城堡(判断有向图是否是一个强连通图)

  1
/*
题意: 给你一个图,求这个有向图示否是一个强连通图(每两个节点都是可以相互到达的)!
思路1:按正向边dfs一遍,将经过的节点计数,如果记录的节点的个数小于n,那么就说明图按照正向边就不是连同的,所以就不是强连通图!
然后按照反向边再进行另一个dfs,同样对经过的节点的个数进行计数,如果个数==n则说明正向遍历和反响遍历都是连通的!那么整个图就是强连通的图!

思路2:直接套用tarjan算法,求出每一个节点所对应的缩点的值, 如果缩点的个数==1,那么证明就会只有一个强连通分量!也就是强连通图

思路3:多次次调用tarjan算法,判断low[u]==pre[u]&&u==1, 如果不满足说明改图有多个缩点,那就不是强连通图!下图说明一下....
                 


*/
//思路一:
2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<vector> 7 #define N 10005 8 using namespace std; 9 10 vector<int>uv[N]; 11 vector<int>vu[N]; 12 13 int vis[N]; 14 15 int cnt; 16 17 int n, m; 18 19 void dfs1(int u){ 20 vis[u]=1; 21 ++cnt; 22 int len=uv[u].size(); 23 for(int i=0; i<len; ++i){ 24 int v=uv[u][i]; 25 if(!vis[v]) 26 dfs1(v); 27 } 28 } 29 30 31 void dfs2(int v){ 32 vis[v]=1; 33 ++cnt; 34 int len=vu[v].size(); 35 for(int i=0; i<len; ++i){ 36 int u=vu[v][i]; 37 if(!vis[u]) 38 dfs2(u); 39 } 40 } 41 42 int main(){ 43 while( scanf("%d%d", &n, &m) && (n||m) ){ 44 memset(vis, 0, sizeof(vis)); 45 for(int i=1; i<=n; ++i){ 46 uv[i].clear(); 47 vu[i].clear(); 48 } 49 while(m--){ 50 int u, v; 51 scanf("%d%d", &u, &v); 52 uv[u].push_back(v); 53 vu[v].push_back(u); 54 } 55 cnt=0; 56 dfs1(1); 57 58 if(cnt==n){ 59 memset(vis, 0, sizeof(vis)); 60 cnt=0; 61 dfs2(1); 62 if(cnt!=n) 63 printf("No\n"); 64 else printf("Yes\n"); 65 } 66 else printf("No\n"); 67 68 } 69 return 0; 70 } 71
 //思路二:
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>#include<stack>#define N 10005using 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=0; 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]); }elselow[u]=min(pre[v], low[u]);} }if(low[u]==pre[u]){++scc_cnt;while(1){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=0;scc_cnt=0;for(int i=1; i<=n; ++i)if(!scc[i])tarjans(i);int i;for(i=2; i<=n; ++i)if(scc[i]!=scc[1]){printf("No\n");break;}if(i>n) printf("Yes\n");memset(pre, 0, sizeof(pre));memset(low, 0, sizeof(low));memset(scc, 0, sizeof(scc));for(i=1; i<=n; ++i)g[i].clear();}return 0; }

 //思路三:
1
#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<vector> 6 #define N 10005 7 using namespace std; 8 9 vector<int>g[N]; 10 bool flag; 11 int pre[N], low[N]; 12 int dfs_clock; 13 14 void tarjans(int u){ 15 pre[u]=low[u]=++dfs_clock; 16 int len=g[u].size(); 17 for(int i=0; i<len; ++i){ 18 int v=g[u][i]; 19 if(!flag) return ; 20 if(pre[u]>pre[v]){ 21 if(!pre[v]){ 22 tarjans(v); 23 low[u]=min(low[v], low[u]); 24 } 25 else 26 low[u]=min(pre[v], low[u]); 27 } 28 } 29 30 if(low[u]==pre[u] && u!=1) 31 flag=false; 32 } 33 34 int n, m; 35 int main(){ 36 while(scanf("%d%d", &n, &m) && (n||m)){ 37 while(m--){ 38 int u, v; 39 scanf("%d%d", &u, &v); 40 g[u].push_back(v); 41 } 42 dfs_clock=0; 43 flag=true; 44 for(int i=1; i<=n; ++i) 45 if(!pre[i]){ 46 if(!flag) break; 47 tarjans(i); 48 } 49 50 if(!flag) printf("No\n"); 51 else printf("Yes\n"); 52 memset(pre, 0, sizeof(pre)); 53 memset(low, 0, sizeof(low)); 54 for(int i=1; i<=n; ++i) 55 g[i].clear(); 56 } 57 return 0; 58 } 59
 

 

 

 

转载于:https://www.cnblogs.com/hujunzheng/p/3928056.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mgg mysql_mgg文件怎么转换mp3格式?

步骤/方法方法/步骤1:下载载视频转换器&#xff0c;我们说到在官网下载比较好吧。下载完成之后&#xff0c;我们就直接点击进行安装&#xff0c;一般 在安装的过程也是非常快速的&#xff0c;主要是按照安装向导上的步骤进行就可以了。方法/步骤2:安装好之后&#xff0c;我们就…

java dao 泛型的好处_java中泛型有什么作用

泛型的作用如下&#xff1a;1、类型安全泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查&#xff1b;通过知道使用泛型定义的变量的类型限制&#xff0c;编译器可以在一个高得多的程度上验证类型假设。没有泛型&#xff0c;这些假设就只存在于程序员的头脑中(或…

java ==和=_Java ==和equals()的区别

前言本篇文章讲的是从JVM角度比较和equals的区别一&#xff1a;** Java数据类型分类**Paste_Image.png1&#xff1a;基本数据类型又称为原始数据类型&#xff0c;他们之间的比较应该使用()&#xff0c;比较的是他们的值。2&#xff1a;引用数据类型当引用数据类型用()进行比较&…

poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)

LCA思想&#xff1a;http://www.cnblogs.com/hujunzheng/p/3945885.html 在求解最近公共祖先为问题上&#xff0c;用到的是Tarjan的思想&#xff0c;从根结点开始形成一棵深搜树&#xff0c;非常好的处理技巧就是在回溯到结点u的时候&#xff0c;u的子树已经遍历&#xff0c;这…

LCA算法的理解

LCA思想&#xff1a;在求解最近公共祖先为问题上&#xff0c;用到的是Tarjan的思想&#xff0c;从根结点开始形成一棵深搜树&#xff0c;非常好的处理技巧就是在回溯到结点u的时候&#xff0c;u的子树已经遍历&#xff0c;这时候才把u结点放入合并集合中&#xff0c; 这样u结点…

java词汇速查手册_java 词汇表速查手册

Abstract class 抽象类:抽象类是不允许实例化的类&#xff0c;因此一般它需要被进行扩展继承。Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法。Access modifier 访问控制修饰符:访问控制修饰符用来修饰Java中类、以及类的方法和变量的访问控制属性。Anonymous …

python3.5 连接mysql_python3.5 連接mysql本地數據庫

前期准備工作&#xff1a;安裝python的模塊&#xff0c;網上大部分讓安裝mysqldb模塊&#xff0c;但是會報錯&#xff0c;原因是python3.5不被其支持&#xff1a;請看該鏈接 我們也可以這樣解決&#xff1a;直接執行&#xff1a;sudo pip3 install pymysql;在python3中輸入impo…

java异常顺序_网易新闻

public class SmallT {public static void main(String args[]) {SmallT t new SmallT();int b t.get();System.out.println(b);}public int get() {try {return 1;} finally {return 2;}}}返回的结果是2。我可以通过下面一个例子程序来帮助我解释这个答案&#xff0c;从下面…

下载国外网站资料需java_Java开发必知道的国外10大网站

1、https://www.google.com/不解释2、https://stackoverflow.com里面包含各种开发遇到的问题及答案&#xff0c;质量比较高。3、https://github.com/免费的开源代码托管网站&#xff0c;包括了许多开源的项目及示例项目等。4、https://dzone.com/提供技术新闻、编程教程、及各种…

java 空数组如何判断,java判断数组是否为空

java判断数组是否为空根据数组长度判断&#xff0c;如果为0&#xff0c;则为空&#xff0c;反之不是。 (推荐学习&#xff1a;java课程)public class Main {public static void main(String[] args) {int[] array1 new int[]{}; //被当成 {0}if (array1 null) {System.out.pr…

php访问网页post获取源码,第一次抓别人网站数据,用postman直接请求可以获取到返回数据,通过代码的方式就一直报错,php...

最近需要抓取下KFC的一些数据通过postman把请求地址和参数都拿过来后可以返回数据我就天真的以为可以通过代码直接发送一个post请求即可但是通过php的curl模拟请求后&#xff0c;返回的一直是服务器异常刚开始时好像成功过&#xff0c;但现在一直都是报这个&#xff0c;我用的就…

php注册机制,php自动注册登录验证机制实现代码_PHP教程

背景&#xff1a;在phpwind站点后台添加一个名为“广告管家”(广告管家为CNZZ的一款广告投放的应用)的应用&#xff0c;整个“广告管家”的应用是通过iframe载入&#xff0c;载入的具体内容根据不同站点显示针对该站点的具体内容&#xff0c;为了提高易用性&#xff0c;有以下的…

php实现直播答题系统,直播答题解决方案

概述即构提供直播答题一站式解决方案&#xff0c;包括 Windows 主播端、移动 APP 端示例源代码(iOS、Android)。1 下载/体验地址由于直播答题场景需要主播端(推流、发题)和观众端(拉流、答题)配合使用&#xff0c;因此开发者需要同时下载这两端的软件。下载后&#xff0c;具体的…

matlab桥梁受力计算公式,matlab桥梁计算

等级&#xff1a;文件 218KB格式 pdf内容简介 该文结合斜拉桥施工监控的工程实践&#xff0c;分析研究利用MATLAB 6&#xff0e;0神经网络算法&#xff0c;可实现模式识别和函数逼近&#xff0c;进行信号处理&#xff0c;利用人工智能进行自动控制及非线性预测等。斜拉桥智能施…

2014 网选 5011 Game(Nim游戏,数学题)

/*题意&#xff1a;Nim游戏&#xff01; 思路&#xff1a;通过异或&#xff0c;判断将n个数表示成二进制的形式之后&#xff0c;是否对应位的数字1 的个数是偶数&#xff01; */ #include<iostream> using namespace std;int main(){int n, x, s;while(cin>>n){s…

先序,中序,后序线索二叉树

//后序线索&#xff0c;这种方法不容易想到 1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 #include<algorithm>5 6 using namespace std;7 8 struct TREE{9 int val; 10 TREE *ch[2]; 11 TREE *thread;//该节点的线索的…

oracle的todate函数 不用英文,关于在mybaties 和 oracle的to_date函数的问题?

ITMISSD)TO_DATE使用详解时常使用to_date函数来查询特定时间内的数据。语法&#xff1a;TO_DATE(x [, format])用于将字符串x转换为时间值&#xff0c;该函数可以指定一个可选的字符串format参数来说明x的格式。如果没有指定format参数&#xff0c;日期就使用默认的数据库格式(…

oracle 字段除以1000,ORACLE常用}1000(之一)_oracle

大家在oracle的r候可能龅胶芏嗫雌聿浑y的}, 特eπ率碚f, 今天我伟阉Y一下, l布o大家, 希望Υ蠹矣助! 和大家一起探, 共同M步!     ORACLE高手碚f是不用看的. 1. Oracle安b完成后的初始口令?   internal/oracle   sys/change_on_install   system/manager   scott/…

oracle 10g rac 修改sga_target不生效,Oracle Rac 修改SGA_TARGET值无变化

Oracle Rac 修改SGA_TARGET值无变化发布时间&#xff1a;2020-08-13 23:02:13来源&#xff1a;ITPUB博客阅读&#xff1a;93作者&#xff1a;dmcatding系统&#xff1a;Red Hat Enterprise Linux Server release 6.4 (Santiago)数据库&#xff1a;Oracle 11.2.0.4.1710171、 al…

oracle表空间 设置,Oracle表空间怎么设置和管理

前言表空间是 Oracle 特有的一种逻辑结构&#xff0c;是管理和组织 Oracle 数据文件一种方式&#xff0c;一个Oracle 数据库能够有一个或多个表空间&#xff0c;而一个表空间则对应一个或多个物理的数据库文件。Oracle 的表空间分为永久空间和临时表空间&#xff0c;同时又分为…