山路 (ghat)--(最短路-最小生成树//超级原点)

2023-10-27

感谢光神送来rating38000分的思路

题目描述

会和神奈子一起改变地形,开凿地下洞穴等。虽说是一起,不过看起来改变土地是诹访子的工作。与其说她是直接将大地整平,不如说这是她麾下的崇神的功劳。——「求闻口授」

山路交错相同,令人烦躁。
于是诹访子想要将山路重新规划,具体的说,山路可以看成 n 个点,m 条边的无向图。她会在这幅图上的基础之上添加一些边,具体的说,她会给每个点设一个权值ai ,然后将点两两之间连边,假如连了一条边为(i,j) ,那么这条边的长度为|ai + k × aj| ,其中 k=1 或 -1。
几千年过去之后,已经没什么人再记得曾经有诹访子这样一位神,然而山路却完整地保留到了今天。
那么你作为一个普通人,现在想要从 1 号点走到 n 号点去,你想知道最短的路径长度是多少?

输入

第一行三个数:n,m,k 。
接下来 m 行:每行三个数ui,vi,wi ,描述一条边连接 ui,vi 长度为 wi。
接下来一行: n个整数,第 i 个整数表示ai。

输出

一行一个整数代表答案。

样例输入 Copy

3 1 -1
1 2 3
1 7 8

样例输出 Copy

4

题目思路

k有两种取值,一种是-1,一种是1,影响的是两点间新建边的权值
1。 k=-1时候,|ai + k × aj|肯定时临项最小,然后建边
这样建出一颗最小生成树
这颗最小生成树,是满足任意两点间的最短距离都在这课树上的
2。 k=1的时候,如果我们在建最小生成树是不满足任意两点最短距离都在树上的,只能够满足任意亮点相互到达使总的代价最小
这时候建立一个超级原点,就能满足边权为a[i]+a[j]因为超级原点的连接的两条边权一条为a[i].w一条为a[j].w

最后跑一个最短路就行了

Code

int n,m,k,head[maxn],cnt,dist[maxn];
vector<PII>zan[maxn];
map<PII,int>mp;
struct node {
    int id,val;
} a[maxn];
struct Node {
    int u,v,w,next;
} e[maxn];
bool cmp(node x,node y) {
    return x.val<y.val;
}
void add(int u,int v,int w) {
    e[cnt].u=u,e[cnt].v=v;
    e[cnt].w=w,e[cnt].next =head[u];
    head[u]= cnt++;
}
void D() {
    dist[1] = 0;
    dist[0] = inf;
    priority_queue<PII,vector<PII>,greater<PII> > q;
    q.push({0,1});
    while(q.size()) {
        PII fr=q.top();
        q.pop();
        int dis = fr.first;
        int dian =fr.second;

        for(int i=head[dian]; ~i; i=e[i].next) {
            int v=e[i].v;
            if(dist[v]>dis+e[i].w) {
                dist[v] = dis +e[i].w;
                q.push({dist[v],v});

            }
        }
    }
    out(dist[n]);
}
int main() {
    n=read(),m=read(),k=read();
    mst(head,-1);
    for(int i=1 ; i<=m ; i++) {
        int u,v,w;
        u=read(),v=read(),w=read();
        zan[u].push_back({v,w});
        add(u,v,w);
        add(v,u,w);
        mp[{u,v}]=1;
    }
    for(int i=1 ; i<=n ; i++) {
        a[i].val=read();
        a[i].id=i;
        dist[i] = inf;
    }
    sort(a+1,a+1+n,cmp);
    if(k==-1) {
        for(int i=1 ; i<n ; i++) {
            int u = a[i].id ;
            int v = a[i+1].id;
            if(mp[{u,v}]) continue;
            add(a[i].id,a[i+1].id,abs(a[i].val+k*a[i+1].val));
            add(a[i+1].id,a[i].id,abs(a[i].val+k*a[i+1].val));
            mp[{u,v}]=1;
        }
    } else if(k==1) {
        for(int i=1 ; i<=n ; i++) {
            add(a[i].id,0,a[i].val);
            add(0,a[i].id,a[i].val);
        }
    }
    D();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

山路 (ghat)--(最短路-最小生成树//超级原点) 的相关文章

  • P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib【普及】

    USACO1 5 特殊的质数肋骨 Superprime Rib 题目描述 农民约翰的母牛总是产生最好的肋骨 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们 农民约翰确定他卖给买方的是真正的质数肋骨 是因为从右边开始切下肋骨 每次
  • Codeforces Round 867 (Div. 3)(A题到E题)

    链接 Dashboard Codeforces Round 867 Div 3 Codeforces 头一次div3做出来四题 第五题也差临门一脚 赛后看到别人e题跟自己几乎一样的思路肠悔青了 还得练才行 A TubeTube Feed 签
  • 图的应用--Prim算法

    图的应用 Prim算法 Prim算法是一种基于顶点的贪心算法 从起始顶点出发 每次迭代选择当前可用的最小权值边 然后把边上依附的其他顶点加入最小生成树 prim算法可以称为 加点法 比较适合稠密图 算法思想 设G V E 是一个加权连通图
  • PCL点云处理之批量读写点云、随机赋予颜色 并保存

    include
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • hdu 5792 World is Exploding 2016 Multi-University 5

    Problem acm hdu edu cn showproblem php pid 5792 题意 给一个序列 V 问有多少个由下标组成的四元组 a b c d 满足 a b c d a lt b c lt d Va lt Vb Vc g
  • [图论]---[网络流]---最大权闭合子图

    最大权闭合子图 闭合图的概念 闭合图建立在有向图之上 对于 G V E 选取一个点的子集 V V 的任意一点的所有能到达的点也在集合 V 内 则称 V 为闭合子图 最大权闭合子图即在G的所有闭合子图中 点权和最大的 最大权闭合子图的求法 构
  • GYM-102920-L. Two Buildings(决策单调性+分治)

    题目链接 题目大意 求一段序列的 h i h j j i 的最大值 step1 转化一下题意 h i h j j i h j h i j i 令a i h i b i h i 然后全部转化为两种坐标 i a i i b i 这样题目就转化成
  • 【算法笔记】Prim算法

    定义 prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 并且其所有边的权值之和最小 算法描述 输入 一个加权连通图 其中顶点集合为V 边集合为E 初始化 Vne
  • Two Arithmetic Progressions

    Two Arithmetic Progressions 题目链接 题意 思路 AC代码1 include
  • Ugly Numbers

    题目描述 Ugly numbers are numbers whose only prime factors are 2 3 or 5 The sequence 1 2 3 4 5 6 8 9 10 12 shows the first 1
  • kuangbin的模板

    直接链接 间接链接
  • 1345:香甜的黄油(Dijkstra)---信息学奥赛一本通

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法 糖 把糖放在一片牧场上 他知道N 1 N 500 只奶牛会过来舔它 这样就能做出能卖好价钱的超甜黄油 当然 他将付出额外的费用在奶牛上 农夫John很狡猾 像以前的巴甫洛夫 他知道
  • hdu1827Summer Holiday【tarjan强连通分量解决最小联系费用】

    1A 撒花 这比买买买开心多了 思路 既然是强连通分量的题 很容易想到形成的东西是一坨一坨的 哈哈 然后如果某一坨入度为0 那么很不幸 这一坨只能直接被威士忌通知 至于具体通知这一坨中的哪一个 枚举一遍就知道了 最后把话费求和 感觉强连通分
  • 数据结构算法—邻接表存储的无向图求连通分量个数

    数据结构算法 邻接表存储的无向图求连通分量个数 邻接表存储结构 typedef struct ArcNode int adjvex 边指向的顶点 struct ArcNode nextarc 下一条边的指针 ArcNode typedef
  • 图论--最近公共祖先LCA

    最近公共祖先LCA LCA Least Common Ancestors 即最近公共祖先 是指这样一个问题 在有根树中 找出某两个结点u和v最近的公共祖先 另一种说法 离树根最远的公共祖先 最近公共祖先是相对于两个节点来说的 一般来说 最近
  • BFS遍历树和DFS遍历树

    遍历树 按照遍历的顺序 如不清楚图的遍历 请先阅读图的遍历 绘制成树型结构 DFS遍历树 以下为图到遍历树的转化 如果不清楚图的遍历 请先阅读笔者的另一篇文章 图的遍历 动图 按照DFS遍历的顺序 绘制成一棵树 途中红色的边就是遍历过程中没
  • D (1173) : A DS二叉树_合并二叉树

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 给定两个二叉树 输出这两个二叉树合并后形成的二叉树 依次输出前序遍历 中序遍历 后序遍历 二 输入与输出 1 输入 第一行输入t 表示有t个测试样例 第
  • E (1052) : DS树--带权路径和

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 计算一棵二叉树的带权路径总和 即求赫夫曼树的带权路径和 已知一棵二叉树的叶子权值 该二叉树的带权路径和APL等于叶子权值乘以根节点到叶子的分支数 然后求
  • 860.染色法判定二分图

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

随机推荐

  • 运行jar包时指定jdk的版本

    set JAVA HOME C Program Files Java jdk1 8 0 153 set CLASSPATH JAVA HOME lib dt jar JAVA HOMe lib tools jar set Path JAVA
  • CryptoPP版本验证

    在使用第三方程序库时 可能会遇到程序库的版本不匹配的问题 下面介绍在使用CryptoPP时 如何验证其版本 代码如下 include
  • 字符串转换成整数

    题目描述 输入一个由数字组成的字符串 把它转换成整数并输出 例如 输入字符串 123 输出整数123 给定函数原型int StrToInt const char str 实现字符串转换成整数的功能 不能使用库函数atoi 分析与解法 本题考
  • 问题:WPS文字提示应用程序已存在该快捷键,请另设快捷键

    1 问题描述 WPS文字 对某一字体样式自定义快捷键 结果提示已存在 如何如何查看已设定快捷键 只针对软件内部冲突 不考虑外部软件影响 我遇到过以下两种情况 1 与自己之前定义的冲突 2 与模板文件冲突 这个不太确定 对于模板冲突 自定义样
  • sqlite的下载安装和配置使用(非常详细)

    sqlite下载链接 Sqlite下载官网 1 这个压缩包中有头文件sqlite3 h以及源码 主要是用到头文件 2 看电脑配置的操作系统或者看所需项目是64位还是32位下载对应的压缩包 3 解压得到这两个文件 sqlite3 def文件用
  • TCP三次握手原理,以及为什么不能改成两次握手

    网上 关于 TCP三次握手 的文章有很多 但很多一些部分讲的含糊其辞 所以才重新造了这个轮子 一方面对那些含糊其辞的部分做了解释 另一方面也方便了以后的学习 1 上图的名词解释 SYN 同步序号 它表示建立连接 TCP规定SYN 1时不能携
  • uniapp如何渲染html模板,uni-app 页面样式

    页面样式与布局 尺寸单位 uni app 支持的通用 css 单位包括 px rpxpx 即屏幕像素 rpx 即响应式px 一种根据屏幕宽度自适应的动态单位 以750宽的屏幕为基准 750rpx恰好为屏幕宽度 屏幕变宽 rpx 实际显示效果
  • B站视频下载(含bv快速变回av)

    下载解压JJDown的软件 打开如下应用程序 JiJiDownForWPF打开首页 原本B站中的每个视频有对应的av号但从2020 3起全都变为bv号 所以如何从bv号中查看av号 谷歌浏览器中打开要下载的B站视频 按F12 开发者工具 选
  • Python#Typora-Python笔记

    01 源码安装Python3 一 源码安装 安装依赖软件包 root qfedu com yum groupinstall Development Tools root qfedu com yum y install zlib devel
  • 日语动词的13种变形

    五段动词 一类动词 辞书形 形 形 形 形 意志形 可能形 行 行 行 行 行 行 行 書 書 書 書 書 書 書 買 買 買 買 買 買 買 假定形 被动形 使役形 命令形 禁止形 被役形 行 行 行 行 行 行 書 書 書 書 書 書
  • 【linux】内核组件 [不断补充中...]

    防火墙 netfilter iptables IP 信息包过滤系统 netfilter 内核空间 kernelspace 是内核的一部分 由一些信息包过滤表组成 这些表包含内核用来控制信息包过滤处理的规则集 即 存放内核过滤规则的防火墙 i
  • GridView 使用方法详解

    GridView 跟ListView 很类似 Listview 主要以列表形式显示数据 GridView 则是以网格形式显示数据 掌握ListView 使用方法后 会很轻松的掌握GridView的使用方法 欢迎关注微信公众号 程序员Andr
  • DBeaver导入csv数据到Oracle

    时隔许久 我又回来写博客啦 前段时间太忙了 绝对不是因为懒才没有写的 大实话 今天用到csv存库的问题 踩了点坑 做个笔记 废话不多说我们开始 第一步 打开DBeaver 右键点击要导入数据的表 选择 导入数据 第二步 点击csv 下一步
  • 反射 动态代理 线程池

    反射 动态代理 线程池 反射 动态获取类的字节码文件 并对其进行抽象 通过反射可以获取一个类的全部方法和属性 然后进行调用 反射与类之间抽象的理解 Class 将字节码对象进行抽象 出现了 1 属性 表示字节码文件的属性的属性 privat
  • PDF阅读时如何返回到跳转之前的位置

    方法 同时按下Alt 左箭头
  • 中国航天科技集团公司的各个研究院

    1 航天一院 中国运载火箭技术研究院 导弹运载火箭总体设计生产总装 2 航天四院 航天动力技术研究院 航天固体燃料发动机研制生产实验 3 航天五院 中国空间技术研究院 卫星 飞船 空间站 探月器等航天器研制生产 4 航天六院 航天推进技术研
  • el+vue 实战 ⑧ el-calendar日历组件设置点击事件、el-calendar日历组件设置高度、el-calendar日历组件自定义日历内部内容

    一 效果图 日历显示内容变为01 02的形式 点击相应的日期后 有一个弹出框显示当天完成的一些内容 二 前端代码设置
  • 切换到WSL2.0后无法连接到x-server Unable to init server: Could not connect: Connection refused无法显示窗口

    之前通过安装vcxsrv 64 1 20 9 0 installer exe 启动x launch服务器后 无法通过bash打开显示窗口 错误 Unable to init server Could not connect Connecti
  • 【Javascript】数据结构与算法-快速排序第一趟结果

    Javascript 数据结构与算法 快速排序第一趟结果 整体思想 案例一 案例二 快速排序代码实现 js 复杂度分析 整体思想 将待排序数组A以某一元素为基准划分为两个子数组left和right 如果基准元素为pivot那么left中的元
  • 山路 (ghat)--(最短路-最小生成树//超级原点)

    感谢光神送来rating38000分的思路 题目描述 会和神奈子一起改变地形 开凿地下洞穴等 虽说是一起 不过看起来改变土地是诹访子的工作 与其说她是直接将大地整平 不如说这是她麾下的崇神的功劳 求闻口授 山路交错相同 令人烦躁 于是诹访子