整理的算法模板合集: 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+∞,那么就无解了。

模板 - 最小树形图(朱刘算法)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Google Palette算法详解以及OC化
  2. 我在这里,等你的故事【小废回家看看】
  3. java垃圾回收之循环引用
  4. .net下Selenium2使用方法总结
  5. 机器学习多元线性回归_过度简化的机器学习(1):多元回归
  6. .NET架构小技巧(2)——访问修饰符正确姿势
  7. c盘清理代码_拒接卡顿,从c盘减负、系统修复及网络加速做起!奥利~~~
  8. 20200922:leetcode35周双周赛题解记录(下)
  9. android 支持swf格式,安卓手机如何播放swf文件
  10. 数据结构--最小生成树详解
  11. vmware workstations 共享虚拟机 failed to connect 903
  12. bugku 二维码题目 多种方法解决、闪的好快、乌云邀请码
  13. 金融级IT架构:网商银行是如何进行数字化落地的
  14. 数据库索引结构(方法),一张图搞懂MySQL索引
  15. unity 3d游戏开发_使用Unity 5开发3D游戏
  16. 闭关修炼,看了老大的博客,才发现自己是多么的技术低,原来我就达到06年的他
  17. HTML表单中get 和post 的区别
  18. 用命令行编译java文件
  19. bp神经网络实现人脸识别,bp神经网络模式识别
  20. 文章单页-推广落地页在线制作-自动生成

热门文章

  1. 初次遇见NLP:从词向量到BERT
  2. Classifying dynamic textures via spatiotemporal fractal analysis(许教授)
  3. 30天提升技术人的写作力-第二天
  4. Java 读写Properties配置文件
  5. JDBC连接Oracle数据库测试
  6. Ubuntu 16.04 LTS 常用工具软件整理(陆续更新)
  7. Java集合---LinkedList源码解析
  8. vmware 共享文件夹(win10下的vmware安装了centos7)
  9. [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...
  10. MIT自然语言处理第五讲:最大熵和对数线性模型(第一部分)