P4716 【模板】最小树形图

输入输出样例

输入 #1

4 6 1
1 2 3
1 3 1
4 1 2
4 2 2
3 2 1
3 4 1

输出 #1

3

输入 #2

4 6 3
1 2 3
1 3 1
4 1 2
4 2 2
3 2 1
3 4 1

输出 #2

4

输入 #3

4 6 2
1 2 3
1 3 1
4 1 2
4 2 2
3 2 1
3 4 1

输出 #3

1

总结

头一次了解到朱刘算法(大佬写的详解,强烈建议初学者观看,很详细)

半伪代码

while(true){步骤一:找到除了根节点外每个点被指向的最短距离的线,连接起来。步骤二未有其他点指向,有则继续下方步骤,无则跳出返回-1。步骤三:找到环,进行预处理。步骤四:判断是否存在环,,有则继续下方步骤,无则跳出返回总和。步骤五:将环变成一个点,并更新所有指向环里点的距离。
}

代码

#include <bits/stdc++.h>
#define ll long long
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
ll n, m, i, j, t, w, sum, k, flag;struct node {ll be, en, va;
}a[2356];
//数组大小别想往下再减少
//别问为什么,问就是闲的ll zhuliu(ll root) {ll sum = 0, dis[n + 1], pre[n + 1], consume[n + 1], vis[n + 1];while (true) {for (ll i = 1; i <= n; i++)dis[i] = flag;//初始化for (ll i = 1; i <= m; i++)if (a[i].be != a[i].en && a[i].va < dis[a[i].en])pre[a[i].en] = a[i].be, dis[a[i].en] = a[i].va;//找到每个点除了根节点外每个点被指向的最短距离的线,记录下来for (ll i = 1; i <= n; i++) {if (i != root && dis[i] == flag)return -1;vis[i] = consume[i] = 0;//查看是否有点没有指向的边,没有跳出即可//并完成初始化}ll cnt = 0;for (ll i = 1; i <= n; i++) {if (i == root)continue;sum += dis[i];//记录长度ll v = i;while (vis[v] != i && v != root && !consume[v])vis[v] = i, v = pre[v];//查看这个点最后是否还会等于自己本身,也就是判断环if (!consume[v] && v != root) {//已经和根节点相连,那么就无需将其缩点//已经缩点预处理过的无需再进行缩点预处理consume[v] = ++cnt;for (ll u = pre[v]; u != v; u = pre[u])consume[u] = cnt;}//为缩环做准备}if (!cnt)return sum;for (ll i = 1; i <= n; i++)if (!consume[i])consume[i] = ++cnt;for (ll i = 1; i <= m; i++) {t = a[i].en;//记录一下未更新前的下标a[i].be = consume[a[i].be];a[i].en = consume[a[i].en];if (a[i].be != a[i].en)a[i].va -= dis[t];//当这个两个点不在一个环中的时候//最后已经确认为最佳路径的距离变成0,还未确认的点将距离缩一次//个人wa点在这里,dis里的下标是未更新前的,需要提前存储//更新的意义是在上次确认过最短路径,但不一定是最佳路径//因此,为了在求和的时候不会出现重复累加的情况//需要用指向此点可能最佳的路线长度减去最短路径长度}root = consume[root]; n = cnt;//更新一下被根节点以及总结点数}
}
int main() {FAST_IO;while (cin >> n >> m >> k) {for (i = flag = 1; i <= m; i++)cin >> a[i].be >> a[i].en >> a[i].va, flag += a[i].va;cout << zhuliu(k) << endl;}
}

P4716 【模板】最小树形图(朱刘算法模板题)相关推荐

  1. poj3164(最小树形图朱刘算法模板)

    题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...

  2. 最小树形图——朱刘算法

    洛咕博客地址:−>ClickHere<−->Click Here<-−>ClickHere<−,求捧场 最近想找最小生成树的题做,奈何难度有限,点进的蓝题紫题都和& ...

  3. [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)

    本题过于简单,朱刘算法模板题,考虑二分一下带宽即可 title code title code #include <cstdio> #include <cstring> #in ...

  4. 最小树形图-朱刘算法详解 +例题解析

    文章目录 最小树形图 定义 和最小生成树的区别 朱刘算法 思想 步骤 流程展示 算法实现 例题 POJ3164_Command_Network HDU2121_Ice_cream's_world_II ...

  5. 生成树最小树形图 -- 朱刘算法详解

    本文借鉴的博文: zephyr_pro dalao的blog 朱刘算法引入: (把一道最小树形图当作最小生成树来做了,wa了后以为是bug像个sb一样d了半天) 最小树形图和最小生成树都是要求总权值最 ...

  6. bzoj 4349: 最小树形图 朱-刘算法

    最裸的最小树形图(←现在才学的弱渣). 显然只需要打一下一个堡垒,然后剩下的可以最后用最小的代价再打. 然后只要把图建出来跑一下朱-刘算法即可. 简单讲一下朱-刘算法吧(思想还是很简单的),下面只考虑 ...

  7. NOIP模拟题 通讯 强连通分量缩点 最小树形图--朱刘算法

    通讯 (message.cpp\c\pas) [问题描述] "这一切都是命运石之门的选择." 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短信,并由此得知了伦 ...

  8. 最小树形图(朱刘算法)

    不好意思 时间比较短,下面应该还会有修订的= = , 那段话是我复制过来的,觉得挺好的就用一下. 下面是讲解(不理解一的时候 , 可以看看二 ,结合图片): 一:   最小树形图,就是给有向带权图中指 ...

  9. 最小树形图——朱刘算法学习小记

    参考资料: https://www.cnblogs.com/hdu-zsk/p/8167687.html https://www.luogu.com.cn/blog/xiaojiji/solution ...

  10. 最小树形图+朱刘算法

    大题上完整的朱.刘算法是由四个大步骤组成的: 1.求最短弧集合E 2.判断集合E中有没有有向环,如果有转步骤3,否则转4 3.收缩点,把有向环收缩成一个点,并且对图重新构建,包括边权值的改变和点的处理 ...

最新文章

  1. python可视化水平箭头_Python交互图表可视化Bokeh:2. 辅助参数
  2. Android Fragment 你应该知道的一切
  3. Python 梯度下降法
  4. wince工业平板电脑_如何防止工业平板电脑温度过高?
  5. 休眠:在sqlRestriction上使用联接表别名
  6. python实现批量图片/文件重命名
  7. linux下命令集合
  8. 类型的方法,以及关于Stringbuffer和String builder的相关补充
  9. SQL基础实例(学生课程系统)
  10. iphone @selector带参数问题
  11. 软件测试工作的不足与改善,软件测试工作中对问题的发现和改进
  12. 用PS调出二次元风格水彩漫画风景图片
  13. html怎么用wps打开pdf文件,怎么使用电脑wps对PDF文件进行修改
  14. WRF-Chem笔记——MOZBC边界场制作
  15. exponential backoff algorithm
  16. jqGrid排序的两种实现方式
  17. CentOS程序包管理、上
  18. 将PowerPoint转换为视频的软件——ppt2wmv简介
  19. V831——车牌识别
  20. 论文那些事—DeepFool: a simple and accurate method to fool deep neural networks

热门文章

  1. 【Labview】G语言
  2. c语言程序设计呼克佑第二版课后答案,《程序设计技术》实验大纲-呼克佑
  3. 互联网黑话汇总大合集
  4. 前端图像处理之马赛克
  5. 《hanhan的创作纪念日:From 2020 To 2023》
  6. Python:利用matplotlib库画各种统计图
  7. Docker-----网络模式与资源控制管理
  8. python 计算加班时间_如何利用python快速统计出全公司的员工加班天数
  9. Spring Cloud入门-Sentinel实现服务限流、熔断与降级(Hoxton版本)
  10. 机器学习中绘制(多标签)PR曲线和F1-score【转载】