【概述】

所谓最小增量生成树问题,即:给定包含 n 个点的空图,依次加入 m 条带权边,每次加入一条边,就输出当前图中最小生成树的权值,如果没有生成树,则输出无解

求解最小增量生成树的方法是:根据最小生成树的回路性质,在原有最小生成树的基础上,每次增加一条边就会构成一个回路,那么去掉这个回路上权值最大的边,得到的就是新的最小生成树。

简单来说,每一次加边之前先跑一遍 Kruskal 找最小生成树,若已经有最小生成树,则新加入的边肯定会让其形成环,这时候开始进行删边操作,删去那个多余的边即可。

【模版】

struct Node {int u,v;int val;bool operator<(const Node& rhs)const {return val<rhs.val;}
} edge[N];
int n,m,cnt;
int father[N];
int Find(int x) {if(father[x]==x)return x;return father[x]=Find(father[x]);
}
void Kruskal() {sort(edge,edge+cnt);int pos=-1;int res=0,mst=0;for(int i=0; i<cnt; i++) {int u=edge[i].u,v=edge[i].v;int x=Find(u),y=Find(v);if(x!=y) {father[x]=y;res++;mst+=edge[i].val;} else {pos=i;continue;}}if(pos!=-1) edge[pos]=edge[--cnt];if(res!=n-1)printf("-1\n");elseprintf("%d\n",mst);
}
int main() {scanf("%d%d",&n,&m);cnt=0;for(int i=0; i<m; i++) {//添m次边scanf("%d%d%d",&edge[cnt].u,&edge[cnt].v,&edge[cnt].val);cnt++;for(int i=0; i<N; i++)father[i]=i;Kruskal();//每次添边跑一次Kruskal}return 0;
}

图论 —— 生成树 —— 增量最小生成树相关推荐

  1. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...

    点击上方蓝字,和我一起学技术. 今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到这些术语和概念往往会很头疼. ...

  2. 数据结构实验之图论九:最小生成树

    数据结构实验之图论九:最小生成树 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 有n个城市,其中有些城市之间可以修建公 ...

  3. 图论 —— 生成树 —— 曼哈顿距离最小生成树

    [概述] 当给出一些二维平面的点时,记两点间距离为曼哈顿距离,此时的最小生成树,称为曼哈顿最小距离生成树. 对于 n 个点来说,最朴素的做法是暴力求出所有所有点两两之间的曼哈顿距离,然后再跑最小生成树 ...

  4. 图论 —— 生成树 —— 最小生成树 —— Prim

    [基本思想] Prim 算法基本思想是蓝白点思想,用白点代表已进入最小生成树的点,蓝点代表未进入最小生成树的点. 每次循环都将一个蓝点 u 变为白点,并且此蓝点 u 与白点相连的最小边权 min[u] ...

  5. 图论 —— 生成树 —— 最小生成树 —— Kruskal

    [基本思想] Kruskal 算法基本思想是并查集思想,将所有边升序排序,并认为每一个点都是孤立的,分属 n 个独立的集合. 按顺序枚举每一条边,如果这条边连接的两个点分属两个不同的集合,那么就将这条 ...

  6. 【图论专题】最小生成树的扩展应用

    整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...

  7. 【图论专题】最小生成树及其简单应用

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1140. 最短网络 prim模板 AcWing 1141. 局域网 kruskal模板 AcWing 1142. 繁忙的都市 ...

  8. 生成树、最小生成树的一些性质以及邻域的概念

    设一个无向连通图G=(V,E),顶点个数记作m,边的数量为n.其对应的最小生成树记作f. 则生成树T的性质有: 边数量为m-1 没有圈 加入任何一条边都会形成一个圈 对于一颗生成树T,定义 操作:在其 ...

  9. 数据结构实验之图论九:最小生成树(Prim/Kruskal)

    Description 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的.现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市. ...

最新文章

  1. 网络营销外包——网络营销外包专员浅析提升用户体验从哪入手?
  2. Linux系统结构 详解
  3. Spread for Windows Forms快速入门(1)---开始使用Spread
  4. python函数应用实例_【Python 第22课】 函数应用示例
  5. html英文字体汇总,笔记 CSS常用中文字体英文名称对照表
  6. Javaspring 7-13课 Spring Bean
  7. hdfs mv命令_Hadoop2.x HDFS shell命令
  8. 进销存系统怎么部署到自己服务器,进销存软件云存储和自建服务器
  9. 商城开发-用户管理模块(2)
  10. 数字化赋能全零售 国美按下战略加速键
  11. Python反转链表
  12. XtuningTheBert
  13. 一元三次、四次方程求解
  14. 优先队列优化迪杰斯特拉
  15. aid learning如何换源
  16. 宁海元 mysql_每公斤约360元 宁海香榧可以品尝了
  17. Git 每次提交都需要输入密码
  18. 如何下载Direct3D9Ex
  19. 小程序的老祖宗PWA为什么没有火起来?
  20. 怎样清理苹果电脑磁盘空间_Macbook苹果电脑提示磁盘空间不足怎么办【解决方法】...

热门文章

  1. OpenSSL的托管项目
  2. 一个完整的数据分析体系,该长啥样?
  3. IDEA 2020年最后一个版本更新了,机器学习都整上了
  4. JVM:我就想知道我是怎么没的
  5. 看看人家架构师那消息队列中间件玩的,那叫一个优雅!
  6. 使用 Spring Validation 优雅地进行参数校验
  7. 漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
  8. 微服务开发的 10 个最佳实践
  9. 漫话:什么是云计算?
  10. 如何制作一个360度全景