hdu1269 运用tarjan算法求有向图中强连通分量数目

HDU-1269(Tarjan模板-求强连通分量) 题目连接 题意:         求一个有向图n个点 m 条边,是否是强连通分量,如果是输出Yes, 不是输出No. 数据范围         n < 10000,  m < 100000 思路:         Tarjan模板题 补习: AC code: /* Tarjan求有向图的强连通分量, */ #include #include #include #include #include using namespace std; const int MAXN = 1e5 + 10; struct Edge{ int to, next, dis; }edge[MAXN << 1]; 立即下载

迷宫城堡

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

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
HDU 2006-4 Programming Contest
题意:给你一个有向图,这个图中任意两点是否可以相互到达

解题思路:分析一下,其实就是问你这个有向图中的强连通分量是否为1,这是一个求强连通分量的裸题。我最近刚学了tarjan算法求有向图的强连通分量,代码如下。如果大家不熟悉tarjan算法可以看下这个人的博客,写的不错,我就是在这个上面学的。
http://blog.youkuaiyun.com/xinghongduo/article/details/6195337

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n,m;
vector<int> g[maxn];
int dfn[maxn];
int low[maxn];
int ans;//强联通分量数目
stack<int> sta;
int Instack[maxn];//0为不在栈中,1为不在栈中,且已经被访问,2为在栈中
int Index;
void tarjan(int u)
{
    dfn[u] = low[u] = ++Index;
    sta.push(u);
    Instack[u] = 2;
    for(int i = 0; i < g[u].size(); i++)
    {
        int v = g[u][i];
        if(Instack[v] == 0)
        {
            tarjan(v);
            low[u] = min(low[u],low[v]);
        }
        else if(Instack[v] == 2)
        {
            low[u] = min(low[u],dfn[v]);
        }
    }
    if(dfn[u] == low[u])
    {
        ans++;
        while(!sta.empty())
        {
            int top = sta.top();
            Instack[top] = 1;
            sta.pop();
            if(top == u) break;
        }
    }
}
void init()
{
    ans = 0;
    Index = 0;
    memset(Instack,0,sizeof(Instack));
    while(!sta.empty()) sta.pop();
    for(int i = 1; i <= n; i++)
    {
        g[i].clear();
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {

        if(n == 0&&m == 0) break;
        init();
        int a,b;
        for(int i = 1; i <= m; i++)
        {
            scanf("%d%d",&a,&b);
            g[a].push_back(b);
        }
        for(int i = 1; i <= n; i++)
        {
            if(Instack[i] == 0)
            {
                tarjan(i);
            }
        }
        if(ans == 1) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}
ROS应用之如何配置RTOS满足机器人系统中的实时要求 实时操作系统(RTOS)基本概念实时操作系统(RTOS)是设计用于实时应用的操作系统,其主要目标是在确定的时间内完成任务。RTOS的任务调度算法和优先级控制机制能够确保高优先级任务按时完成。精确的传感器数据采集:传感器数据需要在规定时间内采集并传输给控制系统。快速响应外部事件:对于控制系统,需要确保指令在最短的时间内得到响应。任务的调度周期:任务的周期可以通过公式计算,其中 ftask 是任务的调度频率。优先级分配。 阅读详情

相关推荐

如何使你的直流电机闭环?(PID讲解)

看了看很多大佬写的PID讲解很全面也很复杂,实在是不适合很多萌新入坑,所以想按自己的理解写一篇通俗易懂的PID算法讲解

a2001444的博客 1万+

强连通分量

强连通分量@(算法学习)首先明白,这个概念是在有向图中的,其次是,如何有效寻找。图中强连通分量的个数是:4个。分析: 强连通分量的定义:有向图中,如果两个顶点vi,vjv_i,v_j之间存在: viv_i到vjv_j的路径 vjv_j到viv_i的路径 则称这两个顶点是强连通的。至于相对的弱连通,则抹去方向,相连即可。那么,道理很简单,如何应用呢?答案是先找回路,然后在回路的基础上,扩展结点。因为

Bing's Blog 2868

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

强连通分量个数的求法(图解)

强连通分量个数的求法(图解) 背景 最近刷软考题的时候,碰到2013年上半年软件设计师的第31题,求程序图的环路复杂度。答案解析中有这么一段话: 根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出: V(G)=m−n+2p(∗)V(G)=m-n+2p(*)V(G)=m−n+2p(∗) 其中,V(G)是有向图G中的环路数,m是图G中弧的个数,n是图G中的结点数,p是图G中的强连通分量个数。 因为一直习惯了用V=m-n+2的公式计算,所以刚看到(*)公式时有点反应不过来,算是自己学习上的一个

weixin_38327135的博客 2万+

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 820

深入浅出ASAP2标准:手把手教你编写和解析A2L文件(含Python示例代码)

本文深入解析ASAP2标准下的A2L文件,涵盖基础概念、文件结构及Python实现代码,帮助开发者掌握汽车ECU标定和测量中的关键数据管理技术。通过详细示例,展示如何编写和解析A2L文件,提升电控数据管理效率。

happy2的博客 1100

强连通分量的个数(Kosaraju)

【题目描述】 求一个有向图中强连通分量的个数。 【解题思路】 先解释一下强连通分量的定义: 一个有向图中,如果每两个点都相互连接(可以不直达),那么这个图就是一个强连通,我们可以把一个有向图分解成若干个强连通分量。 那么我们应该怎么做呢? 首先,从任意一个点开始遍历,记录每个点出栈的顺序。 原理,但我们对一个图进行dfs遍历的时候,我们从最深层开始出栈,如果我们把一个点的出度看作是通往下一层的话,那么我们最先出栈的肯定就是没有出度的了,当一个点的所有出度的点全部出栈了,那么我们也可以看作这个点的出度

FKJDASOI的博客 3576

硬件压力测试工具使用方法

B, --bind host# 绑定到主机的多个地址中的一个。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。-c, --client host#如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。-C, --compatibility# 与低版本的Iperf使用时,可以使用兼容模式。-b, --bandwidth #[KM] UDP模式使用的带宽,单位bits/sec。

weixin_53303772的博客 8219

求有向图强连通分量个数

强连通图(Strongly Connected Graph)是指一个有向图(Directed Graph)中任意两点v1、v2间存在v1到v2的路径(path)及v2到v1的路径的图。 在一个tu

thy0311的专栏 8846

在LangChain中使用DashVector进行高效向量检索

DashVector为需要处理高维向量数据的开发者提供了一种便捷且高效的解决方案。通过将其集成到LangChain生态系统中,您可以轻松实现复杂的语义搜索和数据分析功能。DashVector官方文档LangChain GitHub仓库有关DashVector的详细notebook示例。

sjufgwgfhoia的博客 455

嵌入式系统开发笔记112:通过有人云测试MQTT

项目中使用到“有人”公司的WH-LTE-7S0模块,本文讲解通过有人云进行MQTT测试的方法。

snmplink的博客 999

有向图的强连通分量算法

强连通分量 Tarjan算法, Kosaraju 算法

Jasonchen1224的博客 4755

LIS2DH三轴加速度传感器原理图设计,已量产(加速度传感器)

最近在做一款可穿戴设备原型时,选了 LIS2DH 这款加速度计 —— 比起之前常用的 ADXL345,它在低功耗和稳定性上的优化刚好戳中了可穿戴设备 “续航 + 可靠” 的核心需求。下面结合这次画的原理图,聊聊这个小模块的硬件设计细节。

不脱发的程序猿 389

HDU 1269 迷宫城堡(强连通分量)

题目地址:HDU 1269 强连通分量裸题。。只要判断是否只有一个强连通分量就可以。 代码如下: #include #include #include #include #include #include #include #include #include #include #include using namespace std; int head[20000],

scf0920 1079

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HDU 1269-迷宫城堡(强连通分量)

题目地址:HDU 1269 一道强连通分量的裸题,当只有一个强连通分量的时候输出Yes,否则输出No #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long lon

Rocky0429 1438

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

强连通-Tarjan算法 配题(HDU 1269)

点于点之间的强连通(u,v):同时存在 u 至 v 的路径,以及 v 至 u 的路径,那么表示u、v两点是强连通。 强连通图:如果一个图中的任意两点都是强连通,那么该图就是强连通图。 解决该问题的算法:Tarjan算法 说明: dfn[u]:深搜过程中点 u 的次序号 low[u]:以 u 为根节点,其能搜索到的最小的次序号 配题:HDU 1269(中文题) 思想:通过给强连通分量进行...

猫ER 440

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HDU1269 迷宫城堡

HDU1269 迷宫城堡 题目大意 给定 有向图 中的 n 个点, m 条边, 求图的 强连同分量 是否为 1. 题目思路 一道裸的 tarjan 题, 需要注意的是边的存储, LOW的含义. 代码 #include <cstdio> #include <cstring> #include <stack> #include <cmath> ...

afnt38230的博客 205

HDU 1269 (Tarjan算法求有向图中强连通分量数目)

#include<bits/stdc++.h> #define maxn 10000+5 using namespace std; vector<int>mp[maxn]; int vis[maxn],dfn[maxn],low[maxn]; int n,m,cnt,sig; void init() { memset(low,0,sizeof(low)); memset(dfn,0,sizeof(dfn)); memset(vis,0,sizeof(vis)); for(i

A798283635的博客 338

HDU1269(强连通分量+Tarjan)

题目链接 题目大意:求给出的有向图是否为一个强联通图 解题思路:Tarjan的入门题,对于Tarjan的理解关键是low数组与dfn数组的理解,前一个是当前搜索树的第一次扫描的tot值,也就是最早的时间戳,我们整个算法就是为了更新它!而dfn是每个点被搜的时间节点,显然,每个点的dfn都不同并且dfn[i] >= low[i]。由于Tarjan是基于深度优先搜索的算法,所以被搜的点的先后次序...

小胡同的诗 536

tarjan求强连通分量

强连通分量定义 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。 tarjan求强连通分量 定义以下几个变量 dfn: 时间变量,代表给结点第几个被访问。 Dfn[u]: 结...

Link_Ray的博客 600

hdu1269 迷宫城堡,有向图的强连通分量 , Tarjan算法

hdu1269 迷宫城堡 验证给出的有向图是不是强连通图。。。 Tarjan算法板子题 Tarjan算法的基础是DFS,对于每个节点、每条边都搜索一次,时间复杂度为O(V+E)。 算法步骤: 1、搜索到某一个点时,将该点的Low值标上时间戳,然后将自己作为所在强连通分量的根节点(就是赋值Dfn=Low=time) 2、将该点压入栈。 3、当点p有与点p’相连时

天亮说晚安 1857

HDU 1269 迷宫城堡(tarjan求强连通分量)

题目链接 思路 tarjan求强连通分量模板题 代码 #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; int low[10005], dfn[10005], vis[10005], tot = 0, n, ans; stack&amp;lt;int&amp;gt; st; vector&amp;lt;int&amp;gt; e[10005]; void tarjan(i...

←_← 323

强连通分量tarjan模板hdu1269迷宫城堡

第一次写强连通tarjan同时也是自己在hdu100题的记录 :在有向图中的强连通分量,核心是深搜,dfn[]数组记录搜索顺序,low[]数组所能返回的最小的点; #include #include #include #include using namespace std; vectorG[10003]; int dfn[10003],low[10003],ss[10003],top=1,mm

835

HDU 1269 迷宫城堡(tarjan算法)

题意:判断是否存在从任意一个起点开始都可以走完余下任何一个点。 解题思路:有向联通图,判断联通分量是否为1。 解题补充知识点:在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected compone...

223

两种强连通分量算法——tarjan和kosaraju

这两个算法其实都非常简单,其中tarjan算法只需进行一次dfs,更为高效。但我更喜欢kosaraju算法,因为这个算法的思考过程更加巧妙。 tarjan算法的思想非常简单直观,随便找篇教程就很容易理解,下面我主要讲讲kosaraju算法。 kosaraju算法进行两次dfs,第一次在原图上进行,并在结点递归调用返回时将结点压入一个栈中,第二次dfs在原图的逆图上进行,并且初始点选择栈中最上面

cgjiayou 6093

hdu1269 Tarjan强连通分量 模板

hdu1269 资料 师兄给的模板 /*2012-12-06 20:16:08 Accepted 1269 46MS 1484K 1339 B C++*/ #include #include #include using namespace std; #define maxn 10010 int n; vector g[maxn]; int Bcnt;

Time flies 4174
上一篇: hdu6016
下一篇: 2016亚洲区域赛现场赛北京赛区e题
creatorx
博客等级 码龄10年 127粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值