Connect the Cities 【HDU - 3371】【Kruskal、变了形的优先队列】

2023-10-28

题目链接


就是问你能否通过选取一些边构成一棵树,最小生成树。


这道题的关键不在于此,在于学到了另外一种优先队列的写法:

struct cmp
{
    bool operator ()(Eddge e1, Eddge e2)
    {
        return e1.val>e2.val;
    }
};
priority_queue <Eddge, vector<Eddge>, cmp > Q;

让我的优先队列变得更好看了,并且可以节约大致20~30ms的时间(可以忽略)。


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN=505;
int N, M, K, a[maxN], root[maxN];
struct Eddge
{
    int nex, to, val;
    Eddge(int a=0, int b=0, int c=0):nex(a), to(b), val(c) {}
    friend bool operator < (Eddge e1, Eddge e2)
    {
        return e1.val<e2.val;
    }
};
struct cmp
{
    bool operator ()(Eddge e1, Eddge e2)
    {
        return e1.val>e2.val;
    }
};
priority_queue <Eddge, vector<Eddge>, cmp > Q;
set<int> st;
void init()
{
    st.clear();
    for(int i=1; i<=N; i++) root[i]=i;
    while(!Q.empty()) Q.pop();
}
int fid(int x)
{
    if(root[x] == x) return x;
    return root[x] = fid(root[x]);
}
int Kruskal()
{
    int ans=0;
    while(!Q.empty())
    {
        Eddge now=Q.top();  Q.pop();
        int u=now.nex, v=now.to, cost=now.val;
        int rou=fid(u), rov=fid(v);
        if(rou!=rov)
        {
            root[rou]=rov;
            ans+=cost;
        }
    }
    for(int i=1; i<=N; i++)
    {
        st.insert(fid(i));
    }
    if(st.size()>1) return -1;
    return ans;
}
int main()
{
    int T;  scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d%d", &N, &M, &K);
        init();
        while(M--)
        {
            int e1, e2, e3;
            scanf("%d%d%d", &e1, &e2, &e3);
            Q.push(Eddge(e1, e2, e3));
        }
        while(K--)
        {
            int t;
            scanf("%d", &t);
            for(int i=1; i<=t; i++)
            {
                scanf("%d", &a[i]);
                if(i>1)
                {
                    Q.push(Eddge(a[i-1], a[i], 0));
                }
            }
        }
        printf("%d\n", Kruskal());
    }
    return 0;
}

 

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

Connect the Cities 【HDU - 3371】【Kruskal、变了形的优先队列】 的相关文章

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

    图的邻接表 我们重点分析一下无向图 邻接表 我们如何将图中所有顶点和边建立起联系 1 我们发现 V0这个顶点与V1和V3相连 通过右边的邻接表可以看到会出现一个以 V0为头结点的单链表 后面连接的元素就是V1和V3 在顶点数组中的下标 2
  • 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)-RC-u5 树与二分图

    2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 文章目录 2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 题目描述 输入格式 输出格式 输入样例 输出样例 思路 A
  • hdu 2586 How far away ?

    Problem acm hdu edu cn showproblem php pid 2586 Meaning 给一棵 n 个点的树 和 n 1 条边的边权 多次询问树上两点的距离 Analysis 以任意顶点为根 DFS 预处理出所有结点
  • 二分图最大完美匹配

    嗯 想不通 就是二分之后的点 寻找左边的点和右边的点的保证两条边的顶点不相同的最大边数 匈牙利算法 O mn 左边寻找和右边相邻的边 如果右边还没有和左边进行连线 那么匹配成功 如果右边已经进行连线 那么考虑左边是否能更改连线 换一个右边
  • [leetcode] 358. Rearrange String k Distance Apart 解题报告

    题目链接 https leetcode com problems rearrange string k distance apart Given a non empty string str and an integer k rearran
  • XYZZY 【POJ - 1932】【SPFA】

    题目链接 有N个点 然后输入1 N个点 输入从它到其他点的血量变化 然后有几个点能到达 最后是这几个点 我们起点为1 终点为N 然后求的是我们是不是有可能或者达到终点 gt 0 直接SPFA跑最长路 感觉是在造样例 6 0 1 2 1000
  • 数据结构 图的应用

    文章目录 生成树 定义 性质 带权图的最小生成树 最小生成树的生成规则 最小生成树 Kruskal算法 步骤 最小生成树 Prim算法 步骤 最短路径 非负权值的单源最短路径 Dijkstra算法 目的 算法 存储空间 算法步骤 算法实现
  • Codeforces Round 867 (Div. 3)(A题到E题)

    链接 Dashboard Codeforces Round 867 Div 3 Codeforces 头一次div3做出来四题 第五题也差临门一脚 赛后看到别人e题跟自己几乎一样的思路肠悔青了 还得练才行 A TubeTube Feed 签
  • 西安电子科技大学第二届程序设计新生赛-F-zxy的长跑【欧拉回路】

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

    题目链接 HDU 3749 你以为学了Tarjan会写几个边双就真的理解什么是双连通分量了吗 我原来真的不懂什么叫做点双BCC 不过这都没有关系 解决了这个问题之后 我终于知道了什么叫做点双连通分量了 这是一个绝对绝对经典的问题 首先讲一下
  • POJ 3259 Wormholes(最短路——Bellman-ford)

    A Wormholes While exploring his many farms Farmer John has discovered a number of amazing wormholes A wormhole is very p
  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • Summer Holiday HDU - 1827 强连通分量+缩点

    To see a World in a Grain of Sand And a Heaven in a Wild Flower Hold Infinity in the palm of your hand And Eternity in a
  • The Necklace 【UVA - 10054】【欧拉回路详解】

    题目链接1 题目链接2 题目求的是一串珠子 要让它们首尾相互照应才能串起来 并且 最后要连成一个环 使得最后的珠子的尾与第一个珠子的头相互对应 那么 这道题就是道求欧拉回路的题了 我们要先判断这是不是能够构成欧拉回路 这是个无向图 再对于需
  • 图 - Java实现无向带权图的邻接矩阵表示法

    图 Java实现无向带权图的邻接矩阵表示法 1 图 1 1 图的介绍 图 Graph 是一种复杂的非线性表结构 图中的元素我们就叫做顶点 vertex 图中的一个顶点可以与任意其他顶点建立连接关系 我们把这种建立的关系叫做边 edge 跟顶
  • Binary Tree on Plane【费用流】

    题目链接 CF 277 E 题意翻译 给你平面上 n 个点 2 n 400 要求用这些点组成一个二叉树 每个节点的儿子节点不超过两个 定义每条边的权值为两个点之间的欧几里得距离 求一个权值和最小的二叉树 并输出这个权值 其中 点 i 可以成
  • BFS遍历树和DFS遍历树

    遍历树 按照遍历的顺序 如不清楚图的遍历 请先阅读图的遍历 绘制成树型结构 DFS遍历树 以下为图到遍历树的转化 如果不清楚图的遍历 请先阅读笔者的另一篇文章 图的遍历 动图 按照DFS遍历的顺序 绘制成一棵树 途中红色的边就是遍历过程中没
  • 讲解 最大流问题+最小花费问题+python(ortool库)实现

    文章目录 基本概念 图 邻接矩阵 最大流问题 python解决最大流问题 python解决最大流最小费用问题 喜欢的话请关注我们的微信公众号 你好世界炼丹师 公众号主要讲统计学 数据科学 机器学习 深度学习 以及一些参加Kaggle竞赛的经

随机推荐

  • 说句“圣诞快乐”不容易!

    1 圣诞快乐 嘿 别以为我们这里都是基督教徒 2 哦 好吧 光明节快乐 犹太教节日 宽扎节快乐 非裔美国人的节日 3 那些节日到了吗 4 好吧 只能说节日快乐了 别说 快乐 抑郁的人伤不起
  • Python对接LDAP/AD的过程详解

    不同公司的 LDAP AD 服务配置各不相同 很难封装一个通用的方法 所以我们在对接 LDAP AD 的过程中 需要了解自己公司的 LDAP AD 服务配置是怎么样的 才能写出正确的对接代码 因此下面将拆解过程并提供相关的文档地址 首先需要
  • 从源码角度分析RabbitMQ重启后,消费者停止消费怎么解决

    前段时间的RabbitMQ broker服务端由于某个队列一直积压消息 运维在凌晨对mq服务端机器pod进行了扩容 重启了RabbitMQ 然后早上发现自己的服务在mq重启之后一直报异常 停止消费了 导致影响了业务的运行 虽然mq重启成功了
  • 服务器虚拟化设计与实现拓扑图,VMware服务器虚拟化解决具体技术方案(详细).doc...

    文档介绍 虚拟化解决方案 目 录 一 V ware解决方案概述 3 1 VMw re服务器整合解决方案 3 1 2 VMware商业连续性解决方案 1 3 VMwar 测试和开发解决方案 8 二 VMware虚拟化实施方案设计 9 2 1
  • 微信小程序:搜索动画显示

    摘要 有时候 我们再加载时 搜索蓝牙和wifi时 需要一个搜索中的动画来渲染我们的页面 动画如下图所示 搜索动画函数wx showLoading wx showLoading函数的所有参数如下 而我们一般用到的是title 如图一中的tit
  • 010.汇编语言基于x86处理器教材习题4.2.8:①-⑤程序

    386 model flat stdcall stack 4096 ExitProcess proto dwExitCode dword data val1 byte 10h val2 word 8000h val3 dword 8000h
  • VUE渲染后端返回含有script标签的html字符串

    在接入支付宝支付模块的时候 支支返回的是一个form串 细看一下还有一个script标签 如何将其渲染出来给大家分享一下经验 注意点 不能在当前页面追加任何元素例如原生js innerHtml appendChiled等等 Vue原生v h
  • JavaCV FrameGrabber问题汇总

    JavaCV FrameGrabber问题汇总 Date 2018 09 27 FrameGrabber类 JavaCV中FrameGrabber类可以连接直播流地址 进行解码 获取Frame帧信息 常用方式如下 FrameGrabber
  • 匈牙利算法

    趣写算法系列之 匈牙利算法 匈牙利算法是由匈牙利数学家Edmonds于1965年提出 因而得名 匈牙利算法是基于Hall定理中充分性证明的思想 它是部图匹配最常见的算法 该算法的核心就是寻找增广路径 它是一种用增广路径求二分图最大匹配的算法
  • vtk体绘制代码报错的解决办法(代码在vtk7,8,9中都能运行),以及VTK数据集网站

    链接 vtk7 1 1官方文档 链接 官方示例代码 链接 VTK资源网站 需要什么资源搜索就行 官网示例中的数据集 资源基本都有 体绘制代码运行不了 一直报错的解决方案 大家应该都看过VTK图形图像进阶那本书了 那本书的VTK版本为5 10
  • 运用Python解析HTML页面获取资料

    在网络爬虫的应用中 我们经常需要从HTML页面中提取图片 音频和文字资源 本文将介绍如何使用Python的requests库和BeautifulSoup解析HTML页面 获取这些资源 一 环境准备 首先 确保您已经安装了Python环境 接
  • 懒加载异常 处理方法

    首先看一下什么是懒加载 所谓懒加载 lazy 就是延时加载 延迟加载 什么时候用懒加载呢 我只能回答要用懒加载的时候就用懒加载 至于为什么要用懒加载呢 就是当我们要访问的数据量过大时 明显用缓存不太合适 因为内存容量有限 为了减少并发量 减
  • Unity3d 图片拼接 混合模式改成点线性过滤

    从效率上来说 点线性过滤 gt 二线性过滤 gt 三线性过滤 如果点线性过滤好用的话为什么NGUI要用三线性过滤呢 1 UISprite是可以随便缩放的 如果不缩放的话点线性没问题 可是一旦缩放因为用点像素来填充那么图片必然糙了 2 我觉得
  • 跨站请求伪造(CSRF)攻击原理及预防手段

    目录 1 什么是跨站请求伪造 2 基本原理 举一个最简单的CSRF攻击例子 3 CSRF攻击的对象和预防思路 4 预防手段介绍 5 Referer检查简单实现 注册拦截器 1 什么是跨站请求伪造 CSRF Cross site Reques
  • 转载:Beginning WF 4.0翻译——第四章(传递参数)

    在第一章 我已经向你展示了在工作流中怎么使用variables 变量 和arguments 参数 跟编码类似 variables类似于类成员 而arguments类似于方法的参数 你已经在前三章使用过variables了 在这一章 我将向你
  • VC++常规错误1>nafxcwd.lib(afxmem.obj) 【转】

    VC 常规错误之17 1 gt nafxcwd lib afxmem obj error LNK2005 1 错误案例 在写日志程序中出现 工程是MFC程序 注 win32控制台应用程序 不会出现这种错误 当然是不支持MFC库的那种 2 错
  • Antd Tree组件Tree props#属性 checkStrictly

    Antd 3 20 7 版本 Tree组件Tree props 属性 checkStrictly 值为true 则点击选中树 子节点时 不会联动选中父节点 而父节点选中也不会默认把所有子节点选中
  • 谈谈机器学习(Machine Learning)大牛

    闲着无事 想写点一些我所了解的machine learning大家 由于学识浅薄 见识有限 并且仅局限于某些领域 一些在NLP及最近很热的生物信息领域活跃的学者我就浅陋无知 所以不对的地方大家仅当一笑 Machine Learning 大家
  • Echarts图表类型

    Echarts图表类型每个系列通过 type 决定 的图表类型 不同的type的值对应的图表类型如下 type bar 柱状 条形图 type line 折线 面积图 type pie 饼图 type scatter 散点 气泡 图 typ
  • Connect the Cities 【HDU - 3371】【Kruskal、变了形的优先队列】

    题目链接 就是问你能否通过选取一些边构成一棵树 最小生成树 这道题的关键不在于此 在于学到了另外一种优先队列的写法 struct cmp bool operator Eddge e1 Eddge e2 return e1 val gt e2