Caocao's Bridges 【HDU - 4738】【Tarjan求桥(割边)】

2023-10-29

题目链接


  在赤壁之战中,曹操被诸葛亮和周瑜击败。但他不会放弃。曹操的军队仍然不善于水战,所以他提出了另一个想法。他在长江建造了许多岛屿,在这些岛屿的基础上,曹操的军队很容易攻击周瑜的部队。曹操还建造了连接岛屿的桥梁。如果所有岛屿都通过桥梁相连,那么曹操的军队可以在这些岛屿中非常方便地部署。周瑜无法忍受,所以他想要摧毁一些曹操的桥梁,这样一个或多个岛屿就会与其他岛屿分开。但周瑜只有一枚由诸葛亮留下的炸弹,所以他只能摧毁一座桥。周瑜必须派人携带炸弹来摧毁这座桥。桥上可能有守卫。轰炸队的士兵数量不能低于桥梁的守卫数量,否则任务就会失败。请弄清楚周瑜至少需要多少士兵。

细节

  有可能有没有守卫的桥,但是还是要一个人去抗炸药啊,所以此时答案为1。

  如果本来就是多个连通图,那么就不需要找人去炸了,此时答案是0。

  剩下的就是Tarjan求无向图的桥了。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
//#include <unordered_map>
//#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define eps 1e-8
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e3 + 7;
int N, M, head[maxN], cnt;
bool vis[(maxN * maxN) << 1];
struct Eddge
{
    int nex, to, val;
    Eddge(int a=-1, int b=0, int c=0):nex(a), to(b), val(c) {}
}edge[(maxN * maxN) << 1];
inline void addEddge(int u, int v, int w)
{
    edge[cnt] = Eddge(head[u], v, w); vis[cnt] = false;
    head[u] = cnt++;
}
inline void _add(int u, int v, int w) { addEddge(u, v, w); addEddge(v, u, w); }
int dfn[maxN], low[maxN], tot, Stap[maxN], Stop, Belong[maxN], Bcnt;
bool instack[maxN] = {false};
void Tarjan(int u)
{
    dfn[u] = low[u] = ++tot;
    Stap[++Stop] = u;
    instack[u] = true;
    for(int i=head[u], v; ~i; i=edge[i].nex)
    {
        if(vis[i]) continue;
        vis[i] = vis[i ^ 1] = true;
        v = edge[i].to;
        if(!dfn[v])
        {
            Tarjan(v);
            low[u] = min(low[u], low[v]);
        }
        else if(instack[v]) low[u] = min(low[u], dfn[v]);
    }
    if(low[u] == dfn[u])
    {
        Bcnt++;
        int v;
        do
        {
            v = Stap[Stop--];
            Belong[v] = Bcnt;
            instack[v] = false;
        } while(u ^ v);
    }
}
inline void init()
{
    cnt = tot = Stop = Bcnt = 0;
    for(int i=1; i<=N; i++) { head[i] = -1; dfn[i] = 0; instack[i] = false; Belong[i] = 0; }
}
int main()
{
    while(scanf("%d%d", &N, &M) && (N | M))
    {
        init();
        for(int i=1, u, v, w; i<=M; i++)
        {
            scanf("%d%d%d", &u, &v, &w);
            _add(u, v, w);
        }
        int tim = 0;
        for(int i=1; i<=N; i++) if(!dfn[i]) { Tarjan(i); tim ++; }
        int ans = INF;
        for(int u=1; u<=N; u++)
        {
            for(int i=head[u], v; ~i; i=edge[i].nex)
            {
                v = edge[i].to;
                if(Belong[u] ^ Belong[v]) ans = min(ans, edge[i].val);
            }
        }
        if(!ans) ans = 1;
        if(tim > 1) ans = 0;
        printf("%d\n", ans < INF ? ans : -1);
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Caocao's Bridges 【HDU - 4738】【Tarjan求桥(割边)】 的相关文章

  • 质数

    include
  • 【C语言】图的邻接表——超详细解析

    图的邻接表 我们重点分析一下无向图 邻接表 我们如何将图中所有顶点和边建立起联系 1 我们发现 V0这个顶点与V1和V3相连 通过右边的邻接表可以看到会出现一个以 V0为头结点的单链表 后面连接的元素就是V1和V3 在顶点数组中的下标 2
  • True Liars 【POJ - 1417】【种类并查集+0-1背包】

    题目链接 题目想要知道有P个好人 说真话的人 和Q个坏人 说假话的人 并且有N条信息 代表A说B是好人 yes 坏人 no 那么 在保证答案唯一的情况下输出这P个好人 并且最后的时候输出 end 否则 输出 no 坑点 答案唯一指的是最后你
  • 图论感想

    图论基础无非也就是图存储 遍历 有向图无向图的连通性 分为图联通和联通分量 有向图为强联通分量 割点与割边 本人目前还没有看网络流内容 只是大致知道是什么 觉得也是图论一部分 个人认为学东西应该大体了解一下所学内容 每学一个必要好好思考 最
  • 数据结构——普里姆(Prim)算法

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 且其所有边的权值之和亦为最小 以下是数据结构中关于普里姆算法的操作 编程风格参考严蔚敏版数据结
  • hdu 5756:Boss Bo

    题目链接如下 Problem 5756 先用dfs确定每个节点的序号编号 并且可以获得每个节点可以包括的子树节点区间范围 再用线段树建立一棵树 在第一次建立的时候我们记录每个节点的深度 然后再进行一次dfs 这次dfs用来更新以不同节点为根
  • 无向图的遍历-BFS与DFS

    一 理论部分 无向图的遍历可用深度搜索 DFS 与广度搜索 BFS 深度搜索的基本方式是由图的一个节点1出发然后随机选一个与其相邻的节点2 接着在选择一个与其相邻的节点3 当一条路遍历完后再选择最近一个遍历过的 且相邻节点有未遍历过的节点
  • 图论17(Leetcode864.获取所有钥匙的最短路径)

    用二进制表示获得的钥匙 假设n 钥匙个数 000000000代表没有钥匙 0000000001代表有idx为1的钥匙 0000000011代表有idx 1 2的钥匙 这方法巧妙又复杂 代码 class Solution static int
  • 西安电子科技大学第二届程序设计新生赛-F-zxy的长跑【欧拉回路】

    题目链接 好极了的欧拉回路 我们想知道怎样才能跑完所有的边 我们可以从度为奇数的点出发 因为这是欧拉回路的无向图的先觉调节 当然 这道题还有另外一种可能就是这是一个环 1 gt 2 2 gt 3 3 gt 4 4 gt 1 那么就没有奇数度
  • 图的应用--Prim算法

    图的应用 Prim算法 Prim算法是一种基于顶点的贪心算法 从起始顶点出发 每次迭代选择当前可用的最小权值边 然后把边上依附的其他顶点加入最小生成树 prim算法可以称为 加点法 比较适合稠密图 算法思想 设G V E 是一个加权连通图
  • 学懂最小生成树(克鲁斯卡尔算法)

    本节 小编将带大家了解最小生成树的第二种构成算法 克鲁斯卡尔算法 Kruskal algorithm 当然 对另一种算法感兴趣的朋友可以看看之前的这篇文章 学懂最小生成树 普里姆算法 目录 一 实现原理 二 代码实现 一 实现原理 克鲁斯卡
  • 离散数学第一章总结

    离散数学第一章 1 公式类型 1 重言式 也是永真式 公式真值恒为1 2 矛盾式 永假式 真值恒为0 3 可满足式 不是矛盾式的就都是可满足式 重言式一定是可满足式 2 成真赋值与成假赋值 也叫成真指派与成假指派 一组原子的取值 真值指派
  • Python,创建map

    import matplotlib pyplot as mpp import os random math matplotlib version 3 5 1 numpy version 1 21 5 创建画布及坐标轴 def set cav
  • King's Quest【POJ 1904】【Tarjan强连通分量】

    Once upon a time there lived a king and he had N sons And there were N beautiful girls in the kingdom and the king knew
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • UVA-10603 倒水问题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 使用广度优先搜索和优先队列 如果找到最小的点则退出 找不到就遍历所有的情况 include
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • 数据结构算法—邻接表存储的无向图求连通分量个数

    数据结构算法 邻接表存储的无向图求连通分量个数 邻接表存储结构 typedef struct ArcNode int adjvex 边指向的顶点 struct ArcNode nextarc 下一条边的指针 ArcNode typedef
  • The Necklace 【UVA - 10054】【欧拉回路详解】

    题目链接1 题目链接2 题目求的是一串珠子 要让它们首尾相互照应才能串起来 并且 最后要连成一个环 使得最后的珠子的尾与第一个珠子的头相互对应 那么 这道题就是道求欧拉回路的题了 我们要先判断这是不是能够构成欧拉回路 这是个无向图 再对于需
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y

随机推荐

  • JVM基本结构

    1 JVM 基本架构 2 区域作用 tips Jdk1 6及之前 有永久代 常量池1 6在方法区 Jdk1 7 有永久代 但已经逐步 去永久代 常量池1 7在堆 Jdk1 8及之后 无永久代 常量池1 8在堆 新增元空间 不属于虚拟机 基于
  • Dynamics 365 CRM证书更换

    周末更新公司crm服务器证书时出现一些问题 感谢提供支持的第三方公司 主要步骤参考如下博文https blog csdn net hyhcl article details 109444954 现把存在的问题补充如下 1 如果需要更新crm
  • CTFshow 命令执行 web41

    文章目录 源码 前言 解题 源码
  • 图解 Java 垃圾回收机制,写得非常好! 侵删

    自动垃圾回收是一种在堆内存中找出哪些对象在被使用 还有哪些对象没被使用 并且将后者删掉的机制 所谓使用中的对象 已引用对象 指的是程序中有指针指向的对象 而未使用中的对象 未引用对象 则没有被任何指针给指向 因此占用的内存也可以被回收掉 在
  • 基于STM32F103C8T6ADC检测交流电压

    上篇文章写了硬件部分的实现思路 通过采样电阻的到小电压后经过二级放大电路得到单片机可处理的交流电压 此文介绍了如何采用单片机采集交流电压以及stm32ADC外设的使用 首先是硬件电路部分 电路没有采用核心板 而是直接将芯片焊接到主板上 采用
  • HTML+CSS设计一个简单的水平一级导航栏

    前面我学习了一段时间的HTML和CSS知识 下面我们来运用知识实现一个简单的水平一级导航栏 实现结果 按步骤一步步来 1 首先我们写出它的HTML部分 HTML部分代码 这里是在 div 中使用三个 a 标签 为了方便我没有使用 p 或者
  • Error: That port is already in use.端口号被占用问题解决方法

    标题端口被占用问题 在服务器端先进行查询 然后kill 9 杀死 2473端口 然后在运行Django项目成功
  • MySQL查看数据库相关信息

    https www cnblogs com jiangxiaobo p 6110647 html
  • 百度测开初面面试题分享

    1 java常用的异常处理机制 Java常用的异常处理机制有以下几种 1 try catch finally语句 用于捕获和处理异常 将可能抛出异常的代码放在try块中 然后在catch块中处理异常 无论是否发生异常 finally块中的代
  • Ubuntu/Centos多方法安装mininet

    Ubuntu安装 方法一 apt 安装 sudo apt get install mininet 方法二 源码安装 下载源码 git clone git github com mininet mininet 查看并选择版本 cd minin
  • Vue报错 Property name “xxx“ is not PascalCase

    报错一 Property name my is not PascalCase 首字母需要大写 写成小写的就会报错 报错二 Do not use built in or reserved HTML elements as component
  • 图片下划线 html,HTML 下划线标签元素 HTML下划线标签

    为html字体下划线样式标签 即对文字实现下划线效果 一 认识html下划线标签U 1 html U下划线标签语法 以开始 以结束 u标签不是单独一个标签 而是有开始有闭合的一对标签 使用时候切记勿忘记结束 完成一组u下划线标签使用 内容
  • 【C语言基础】顺序表、链表

    文章目录 一 线性表 1 线性表定义 2 顺序表 2 1 插入操作 2 2 删除操作 2 3 查找操作 二 单链表 1 头插法创建链表 1 1 代码实现 2 尾插法创建链表 2 1 代码实现 3 查找操作 3 1 按值查找 3 2 按位查找
  • 【CTF】端口扫描教程

    学习目的 熟悉TCP UDP协议基础 掌握nmap扫描原理 能够使用命令行与图形界面进行信息收集 熟练使用nmap常用参数对不同网络环境进行端口扫描 并通过扫描结果对目标进行分析 预备知识 TCP与UDP TCP是一种面向连接 连接导向 的
  • Angular6 和 RXJS6 的一些改动

    例一 import Injectable from angular core import Observable from rxjs import User from model User import map from rxjs oper
  • [JavaEE系列] 详解多线程中的CAS及其ABA问题

    文章目录 说在前面 什么是CAS CAS典型的应用场景 1 使用CAS实现原子类 2 使用CAS实现自旋锁 CAS的ABA问题 1 一个ABA问题的例子 2 ABA问题导致出现的BUG 3 ABA问题的解决方案 说在前面 本篇文章是基于前面
  • 详解谷歌最强NLP模型BERT(理论+实战)

    作者 李理 环信人工智能研发中心vp 十多年自然语言处理和人工智能研发经验 主持研发过多款智能硬件的问答和对话系统 负责环信中文语义分析开放平台和环信智能机器人的设计与研发 本文是作者正在编写的 深度学习理论与实战 的部分内容 导语 Goo
  • 电动汽车整车动力参数匹配app。 电机外特性曲线绘制 集成matlab界面小程序

    电动汽车整车动力参数匹配app 电机外特性曲线绘制 集成matlab界面小程序 内容 已知电动汽车整车参数 求解电机主要工作点 并绘制外特性曲线 包括 界面和带可编辑源码 2019版以上打开 推出的App 后期替换GUI功能 另外程序描述比
  • Cocos2dx-demo演示项目:Part1

    这个项目 我主要是用来积累 记录自己在利用cocos2dx引擎进行项目开发 学习实践中的开发经验 每天的开发任务 查看别人分享的内容 总是能够收获到可取的东西 将这些可取的东西自己再着手开发一次 能够进一步深刻理解这些 同时今后如果碰到类似
  • Caocao's Bridges 【HDU - 4738】【Tarjan求桥(割边)】

    题目链接 在赤壁之战中 曹操被诸葛亮和周瑜击败 但他不会放弃 曹操的军队仍然不善于水战 所以他提出了另一个想法 他在长江建造了许多岛屿 在这些岛屿的基础上 曹操的军队很容易攻击周瑜的部队 曹操还建造了连接岛屿的桥梁 如果所有岛屿都通过桥梁相