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;我们就…

poj 2385Apple Catching(简单dp)

1 /*2 题意&#xff1a; 有两棵苹果树&#xff0c;每一棵苹果树每一秒间隔的掉落下来一个苹果&#xff0c;一个人在树下接住苹果&#xff0c;不让苹果掉落&#xff01;3 人在两棵树之间的移动是很快的&#xff01;但是这个人移动的次数是有限制的&#xff0c;问最多可以…

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

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

poj3249Test for Job(记忆化搜索)

1 /*2 题意&#xff1a;给一个DAG图&#xff0c;n个节点&#xff0c;每个节点都对应一个值&#xff0c;入度为零的点走到出度为零的点&#xff0c;计算所有可能路径3 经过节点值的和最大&#xff01;4 5 思路&#xff1a;记忆话搜索&#xff1a;也就是如果我们搜索…

Java两同_java:一个类实现的两个接口里都有同一个方法(名),怎么处理?

不一定&#xff0c;关键要看子类是否是抽象类。如果子类是非抽象类&#xff0c;则必须实现接口中的所有方法&#xff1b;如果子类是抽象类&#xff0c;则可以不实现接口中的所有方法&#xff0c;因为抽象类中允许有抽象方法的存在&#xff01;1、抽象类定义抽象类往往用来表征对…

ZOJ3805Machine(二叉树左右子树变换)

1 /*2 题意&#xff1a;建立一棵二叉树&#xff0c;左子树和父节点占一个宽度&#xff0c;右子树另外占一个宽度&#xff01;3 使任意左右子树交换顺序&#xff0c;使得整个树的宽度最小&#xff01;4 思路&#xff1a;递归交换左右子树 &#xff01; …

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

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

ZOJ 3804 YY's Minions (简单模拟)

1 /*2 题意&#xff1a;一个矩阵中有 n*m个宠物&#xff0c;每一个宠物都有一个状态&#xff0c; 1醒着的&#xff0c;0睡着的3 X离开的&#xff01;如果这个宠物&#xff08;醒着的&#xff09;的周围醒着的个数>3 || <2它就会睡着&#xff0c;4 如果这个宠物&…

java接口方法实现_Java接口的简单定义与实现方法示例

本文实例讲述了Java接口的简单定义与实现方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1、接口是Java中最终要的概念&#xff0c;接口可以理解为一种特殊的类&#xff0c;里面全部是由全局常量和公共的抽象方法所组成。2、接口的格式:interface interfaceName{全…

NYOJ995硬币找零(简单dp)

1 /*2 题意&#xff1a;给你不同面额的硬币&#xff08;每种硬币无限多&#xff09;&#xff0c;需要找零的面值是T&#xff0c;用这些硬币进行找零&#xff0c;3 如果T恰好能被找零&#xff0c;输出最少需要的硬币的数目&#xff01;否则请输出剩下钱数最少的找零方案…

docker mysql命令大全_Docker命令大全

Docker run 命令docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明&#xff1a;-a stdin: 指定标准输入输出内容类型&#xff0c;可选 STDIN/STDOUT/STDERR 三项&#xff1b;-d: 后台运行容器&#xff0c;并返回容器ID&#xff1b;-i: 以交互模式运行容器&#xff0c;…

NYOJ 1023 还是回文(DP,花最少费用形成回文串)

1 /*2 题意&#xff1a;给出一串字符(全部是小写字母)&#xff0c;添加或删除一个字符&#xff0c;都会产生一定的花费。3 那么&#xff0c;将字符串变成回文串的最小花费是多少呢&#xff1f; 4 5 思路&#xff1a;如果一个字符串增加一个字符 x可以形成一个回文串…

java mapreduce教程_Java搭建MapReduce完成二次排序步骤

1、构建新的作业Configuration confgetConf();Job jobJob.getInstance(conf);job.setJarByClass(SortYearAndTemp2.class);2、设置输入输出目录Path inpathnew Path(conf.get("inpath"));Path outpathnew Path(conf.get("outpath"));FileInputFormat.addIn…

contentprovider java_创建Contentprovider,

创建Contentprovider:1. 创建一个provider----ExampleContentProvidera. 设计authority b. 设计path c.处理content URI IDs d.Content URI patterns)定义MIME Types(One of the required methods that you must implement for any provider.A method that youre expected to i…

hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)

1 /*2 题意&#xff1a;给出一个无向图&#xff0c;去掉一条权值最小边&#xff0c;使这个无向图不再连同&#xff01;3 4 tm太坑了...5 1,如果这个无向图开始就是一个非连通图&#xff0c;直接输出06 2&#xff0c;重边&#xff08;两个节点存在多条边&am…

poj1273Drainage Ditches

1 #include<iostream>2 /*3 题意&#xff1a;就是寻找从源点到汇点的最大流&#xff01;4 要注意的是每两个点的流量可能有多个&#xff0c;也就是说有重边&#xff0c;所以要把两个点的所有的流量都加起来5 就是这两个点之间的流量了&#xff0…

Java11.0.2怎么生成JRE_java环境变量配置,jdk13.0.1中没有jre解决办法

标签&#xff1a;完成后 回车 手动 完成 cmd 没有 alt span 环境变量配置java.Oracle中下载了最新的jdk13.0.1&#xff0c;安装之后发现没自动生成jre&#xff0c;导致环境变量配置一直不成功如果没有自动生成jre&#xff0c;需要手动生成jre手动生成办法&…

hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)

1 /*************************************************************************2 > File Name: j.cpp3 > Author: HJZ4 > Mail: 2570230521qq.com 5 > Created Time: 2014年08月28日 星期四 12时26分13秒6 ***********************************…

java二期_享学二期java架构师

前言-薇:itstudy01在我们工作和学习的过程中&#xff0c;Java线程我们或多或少的都会用到&#xff0c;但是在使用的过程上并不是很顺利&#xff0c;会遇到各种各样的坑&#xff0c;这里我通过讲解Thread类中的核心方法&#xff0c;以求重点掌握以下关键技术点&#xff1a;线程的…

poj3342Party at Hali-Bula(树形dp)

1 /*2 树形dp&#xff01;3 判重思路&#xff1a;4 当dp[v][0]dp[v][1]时&#xff0c;很自然&#xff0c;flag[u][0]必然是有两种方案的。flag[u][1]则不然&#xff0c;5 因为它只和dp[v][0]有关系。而若flag[v][0]不唯一时&#xff0c;则必然flag[u][1]也不唯一6 …