模板 - 最小树形图(朱刘算法)
整理的算法模板合集: ACM模板
目录
- 给定一个根的有向图的最小树形图
- 为给定根的树形图
- 判断无解的方法
给定一个根的有向图的最小树形图
给定包含 n 个结点,m 条有向边的一个图。试求一棵以结点 r 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 r
为根的最小树形图,输出 −1。
#include<bits/stdc++.h>
using namespace std;
const int N=106,M=10006,inf=2e8;
int n,m,rt,t,cnt=0,id[N],pre[N],ine[N],vis[N];
struct line{int x,y,c;}q[M];
inline int read(){int T=0,F=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') F=-1; ch=getchar();}while(ch>='0'&&ch<='9') T=(T<<3)+(T<<1)+(ch-48),ch=getchar();return F*T;
}
int zhuliu(){int ans=0;while(true){cnt=0;for(int i=1;i<=n;++i) ine[i]=inf,vis[i]=0,id[i]=0;//预处理for(int i=1;i<=m;++i) if(q[i].x!=q[i].y&&ine[q[i].y]>q[i].c) ine[q[i].y]=q[i].c,pre[q[i].y]=q[i].x;//每个点的最短边for(int i=1;i<=n;++i) if(i!=rt&&ine[i]==inf) return -1;//有点无最短边for(int i=1;i<=n;++i){if(i==rt) continue;ans+=ine[i],t=i;while(vis[t]!=i&&!id[t]&&t!=rt) vis[t]=i,t=pre[t];//能走到环的点或者换上的点停下if(!id[t]&&t!=rt){id[t]=++cnt; //将环上的点标记为新的环for(int o=pre[t];o!=t;o=pre[o]) id[o]=cnt;}}//找环if(!cnt) break;//无环结束for(int i=1;i<=n;++i) if(!id[i]) id[i]=++cnt;for(int i=1;i<=m;++i){t=q[i].y,q[i].x=id[q[i].x],q[i].y=id[q[i].y];if(q[i].x!=q[i].y) q[i].c-=ine[t];}n=cnt,rt=id[rt];//去旧图,换新图}return ans;
}
int main(){n=read(),m=read(),rt=read();for(int i=1;i<=m;++i) q[i].x=read(),q[i].y=read(),q[i].c=read();printf("%d\n",zl());return 0;
}
为给定根的树形图
求没有确定的根的树形图:建立一个超级根r,以它为根跑算法,只要将r向原图每个点连接一条权值大于原图中所有边的边权的边,这样选这些边肯定不划算,因此只会选择一条。
判断无解的方法
判无解的奇技淫巧:从小到大依次枚举每个点i,加入边 (i,(i+1)%n+1,+∞)(i,(i+1)\%n+1,+\infty)(i,(i+1)%n+1,+∞) ,这样如果你最后得到的答案为+∞+\infty+∞,那么就无解了。
模板 - 最小树形图(朱刘算法)相关推荐
- 最小树形图——朱刘算法
洛咕博客地址:−>ClickHere<−->Click Here<-−>ClickHere<−,求捧场 最近想找最小生成树的题做,奈何难度有限,点进的蓝题紫题都和& ...
- poj3164(最小树形图朱刘算法模板)
题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...
- 最小树形图-朱刘算法详解 +例题解析
文章目录 最小树形图 定义 和最小生成树的区别 朱刘算法 思想 步骤 流程展示 算法实现 例题 POJ3164_Command_Network HDU2121_Ice_cream's_world_II ...
- 生成树最小树形图 -- 朱刘算法详解
本文借鉴的博文: zephyr_pro dalao的blog 朱刘算法引入: (把一道最小树形图当作最小生成树来做了,wa了后以为是bug像个sb一样d了半天) 最小树形图和最小生成树都是要求总权值最 ...
- bzoj 4349: 最小树形图 朱-刘算法
最裸的最小树形图(←现在才学的弱渣). 显然只需要打一下一个堡垒,然后剩下的可以最后用最小的代价再打. 然后只要把图建出来跑一下朱-刘算法即可. 简单讲一下朱-刘算法吧(思想还是很简单的),下面只考虑 ...
- [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)
本题过于简单,朱刘算法模板题,考虑二分一下带宽即可 title code title code #include <cstdio> #include <cstring> #in ...
- NOIP模拟题 通讯 强连通分量缩点 最小树形图--朱刘算法
通讯 (message.cpp\c\pas) [问题描述] "这一切都是命运石之门的选择." 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短信,并由此得知了伦 ...
- 最小树形图(朱刘算法)
不好意思 时间比较短,下面应该还会有修订的= = , 那段话是我复制过来的,觉得挺好的就用一下. 下面是讲解(不理解一的时候 , 可以看看二 ,结合图片): 一: 最小树形图,就是给有向带权图中指 ...
- 最小树形图+朱刘算法
大题上完整的朱.刘算法是由四个大步骤组成的: 1.求最短弧集合E 2.判断集合E中有没有有向环,如果有转步骤3,否则转4 3.收缩点,把有向环收缩成一个点,并且对图重新构建,包括边权值的改变和点的处理 ...
- 最小树形图——朱刘算法学习小记
参考资料: https://www.cnblogs.com/hdu-zsk/p/8167687.html https://www.luogu.com.cn/blog/xiaojiji/solution ...
最新文章
- Google Palette算法详解以及OC化
- 我在这里,等你的故事【小废回家看看】
- java垃圾回收之循环引用
- .net下Selenium2使用方法总结
- 机器学习多元线性回归_过度简化的机器学习(1):多元回归
- .NET架构小技巧(2)——访问修饰符正确姿势
- c盘清理代码_拒接卡顿,从c盘减负、系统修复及网络加速做起!奥利~~~
- 20200922:leetcode35周双周赛题解记录(下)
- android 支持swf格式,安卓手机如何播放swf文件
- 数据结构--最小生成树详解
- vmware workstations 共享虚拟机 failed to connect 903
- bugku 二维码题目 多种方法解决、闪的好快、乌云邀请码
- 金融级IT架构:网商银行是如何进行数字化落地的
- 数据库索引结构(方法),一张图搞懂MySQL索引
- unity 3d游戏开发_使用Unity 5开发3D游戏
- 闭关修炼,看了老大的博客,才发现自己是多么的技术低,原来我就达到06年的他
- HTML表单中get 和post 的区别
- 用命令行编译java文件
- bp神经网络实现人脸识别,bp神经网络模式识别
- 文章单页-推广落地页在线制作-自动生成
热门文章
- 初次遇见NLP:从词向量到BERT
- Classifying dynamic textures via spatiotemporal fractal analysis(许教授)
- 30天提升技术人的写作力-第二天
- Java 读写Properties配置文件
- JDBC连接Oracle数据库测试
- Ubuntu 16.04 LTS 常用工具软件整理(陆续更新)
- Java集合---LinkedList源码解析
- vmware 共享文件夹(win10下的vmware安装了centos7)
- [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...
- MIT自然语言处理第五讲:最大熵和对数线性模型(第一部分)