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
  • 东北大学acm训练第五周

    include
  • 图论进阶指南-银河(差分约束/DAG/tarjan)

    测评地址 题目大意 第一行给出两个整数N和M 之后M行 每行三个整数T A B 表示一对恒星 A B 之间的亮度关系 恒星的编号从1开始 如果T 1 说明A和B亮度相等 如果T 2 说明A的亮度小于B的亮度 如果T 3 说明A的亮度不小于B
  • 图论:Dijkstra算法——最详细的分析,图文并茂,一次看懂!

    文章目录 1 Dijkstra算法简介 2 算法实现范例 3 邻接矩阵 4 Dijkstra 算法的 C 描述 5 Dijkstra 算法的 Matlab 描述 6 温故知新 1 Dijkstra算法简介 背景 迪杰斯特拉算法 Dijkst
  • UVA-1601 万圣节后的早晨 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 以三个点的当前位置作为状态 广度优先遍历 找到终点即为最短次数 注意 一次可以移动多个点 但是每个点只能移动一步 在同一次中 B可
  • 【构造】0617 Edge Split

    题意 给定一个 n n n 点 m m m 条边的无向连通图 其中 1
  • 数据结构——普里姆(Prim)算法

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

    题目描述 给一个无向连通图 至少添加几条边使得去掉图中任意一条边不改变图的连通性 即使得它变为边双连通图 include
  • 西安电子科技大学第二届程序设计新生赛-F-zxy的长跑【欧拉回路】

    题目链接 好极了的欧拉回路 我们想知道怎样才能跑完所有的边 我们可以从度为奇数的点出发 因为这是欧拉回路的无向图的先觉调节 当然 这道题还有另外一种可能就是这是一个环 1 gt 2 2 gt 3 3 gt 4 4 gt 1 那么就没有奇数度
  • Codeforces-1454E Number of Simple Paths(基环树-思维)

    题目大意 给你n个点 n条边 求图中简单路径的个数 题目思路 n个点n条边 那么图中一定有一个环 拿这个图来讲 我们将两点间的关系分为4种 1 两点都在环上 简单路径的个数为2 例如2与5 2 一个点在环上一个点不在环上 简单路径个数为2
  • A*算法 解决(有环图)第k短路径长度(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • 离散数学第一章总结

    离散数学第一章 1 公式类型 1 重言式 也是永真式 公式真值恒为1 2 矛盾式 永假式 真值恒为0 3 可满足式 不是矛盾式的就都是可满足式 重言式一定是可满足式 2 成真赋值与成假赋值 也叫成真指派与成假指派 一组原子的取值 真值指派
  • [图论]---[网络流]---最大权闭合子图

    最大权闭合子图 闭合图的概念 闭合图建立在有向图之上 对于 G V E 选取一个点的子集 V V 的任意一点的所有能到达的点也在集合 V 内 则称 V 为闭合子图 最大权闭合子图即在G的所有闭合子图中 点权和最大的 最大权闭合子图的求法 构
  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • 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
  • 数据结构——非线性结构(图)

    文章目录 一 非线性结构的概述 二 图的基本概念 1 定义 2 无向图 有向图 2 1 无向图 2 2 有向图 2 3 简单图 2 4 多重图 3 顶点的度 出度 入度 3 1 对于无向图 3 2 对于有向图 4 边的权 带权图 网 5 点
  • hdu1827Summer Holiday【tarjan强连通分量解决最小联系费用】

    1A 撒花 这比买买买开心多了 思路 既然是强连通分量的题 很容易想到形成的东西是一坨一坨的 哈哈 然后如果某一坨入度为0 那么很不幸 这一坨只能直接被威士忌通知 至于具体通知这一坨中的哪一个 枚举一遍就知道了 最后把话费求和 感觉强连通分
  • 714阿里巴巴模拟面试

    介绍一下数据库分页 https www nowcoder com questionTerminal 3577280c810546658f06f19c01ff0345 给定一棵树 求出这棵树的直径 即两个节点距离的最大值 应该是左右子树遍历深
  • 数据结构——广度优先遍历(BFS)无向连通图

    以下是数据结构中关于广度优先遍历无向连通图的操作 编程风格参考严蔚敏版数据结构 其实深度优先遍历就是二叉树的层次遍历的推广 头文件及宏 include
  • 860.染色法判定二分图

    二分图是指一个图中的所有顶点可以分为两部分 并且每条边连接的是属于不同部分的两个顶点 include

随机推荐

  • 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求桥(割边)】

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