并查集&MST

【HDU】

1198 Farm Irrigation 基础最小生成树★

1598 find the most comfortable road 枚举+最小生成树★★

1811 Rank of Tetris 并查集+拓扑排序★★

3926 Hand in Hand 同构图★

3938 Portal 离线+并查集★★

2489     Minimal Ratio Tree dfs枚举组合情况+最小生成树★

4081     Qin Shi Huang‘s National Road System 最小生成树+DFS★★

4126     Genghis Khan the Conqueror 枚举+最小生成树+DFS(难)★★★★

2860 并查集
2144 LCS+并查集

1829&&poj2492 A Bug‘s Life 基础种类并查集★

1558 Segment set 计算几何+并查集★

3461 Code Lock 并查集(有点难想到)★★

3367 Pseudoforest 最大生成树★

2473 Junk-Mail Filter 并查集+设立虚父节点(马甲)★★

3172 Virtual Friends 带权并查集★

3635 Dragon Balls 带权并查集★

3047 Zjnu Stadium 带权并查集★

3038 How Many Answers Are Wrong 种类并查集★★

2818 Building Block 带权并查集★

3234 Exclusive-OR 异或并查集(难)★★★

2121     Ice_cream’s world II 最小树形图(要输出根有点恶心)★★

4009     Transfer water 最小树形图(模板题)★

3311    Dig The Wells 斯坦纳树(状压DP)(模板题)★★

4085  Peach Blossom Spring 斯坦纳树(状压DP)(有可能是森林...)★★★

1970 Ticket to Ride 斯坦纳树(状压DP)

4253 Two Famous Companies

4263 Red/Blue Spanning Tree

4313 Matrix [最大生成森林]

4424 Conquer a New Region [最大生成森林]

4509 湫湫系列故事——减肥记II [可以用并查集,区间合并]

===================================================================
【POJ】

1258 最经典的MST★

1789 Truck History 最小生成树★

1287 Networking 简单★

2349 Arctic Network 简单★

1611 The Suspects 并查集★

2377 kruskal★

2524 Ubiquitous Religions 并查集★

2236 Wireless Network 并查集+计算几何★

2560 Kruskal 并查集★

1861 Kruskal★
3625 prim★

1679 - The Unique MST(基础) 判断MST是否唯一★

3522 - Slim Span(基础) 求一颗生成树,让最大边最小边差值最小★

2485 Highways MST中的最长边★

2395 最小生成树的最长边★

1751 Highways 求出方案★

POJ-1182 食物链 种类并查集★★

POJ 1456 Supermarket 贪心+区间合并★

POJ-1703 种类并查集★
POJ-1988 种类并查集★

POJ-1733 Parity game 种类并查集,先要离散化一下,不影响结果★

POJ-1417 True Liars(难) 并查集+DP 种类并查集★★

POJ-2912 Rochambeau(难) baidu的题,很不错...是食物链的加强版.判断裁判比较难想.★★★

POJ 2728 - Desert King(中等) 最优比率生成树★★

POJ 1639 - Picnic Planning(较难) 顶点度数有限制的最小生成树★★

POJ 3164 - Command Network(难) 最小树形图★★

poj3723 好题!!! ★★
poj3228 好好题!!! ★★
POJ-1984 Navigation Nightmare 二维曼哈顿距离并查集.
===================================================================
【ZOJ】

ZOJ-3261 逆向并查集 ★★

ZOJ-3613 斯坦纳树

时间: 2024-10-29 19:06:16

并查集&MST的相关文章

CSP 201703-4 地铁修建【最小生成树+并查集】

问题描述 试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁. 地铁由很多段隧道组成,每段隧道连接两个交通枢纽.经过勘探,有m段隧道作为候选,两个交通枢纽之间最多只有一条候选的隧道,没有隧道两端连接着同一个交通枢纽. 现在有n家隧道施工的公司,每段候选的隧道只能由一个公司施工,每家公司施工需要的天数一致.而每家公司最多只能修

hdu-5861 Road(并查集)

题目链接: Road Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description There are n villages along a high way, and divided the high way into n-1 segments. Each segment would charge a certain amount of mone

图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 B(G).其中 T(G)是遍历图时所经过的边的集合,B(G) 是遍历图时未经过的边的集合.显然,G1(V, T) 是图 G 的极小连通子图,即子图G1 是连通图 G 的生成树. 深度优先生成森林   右边的是深度优先生成森林: 连通图的生成树不一定是唯一的,不同的遍历图的方法得到不同的生成树;从不

克鲁斯卡尔算法+并查集

算法要点:Kruskal算法的最难点在于怎样判断加入边(x,y)后是否形成了环. 问题可化为:判断边(x,y)的两个顶点x,y在图(实际是森林)mst中最否已经连通.如果已经连通,加入边将形成环:否则,不形成环. 在kruskal算法中,要用到并查集的合并和查找 并查集: 1 int getfa(int k) //找到最祖先 2 { 3 if(fa[k]==k) return k; 4 fa[k]=getfa(fa[k]); 5 return fa[k]; 6 } 7 8 void merge(

算法导论——最小生成树:Kruskal算法(利用了并查集)

package org.loda.graph; import org.loda.structure.MinQ; import org.loda.structure.Queue; import org.loda.util.In; /** * * @ClassName: KruskalMST * @Description:Kruskal最小生成树算法 * @author minjun * @date 2015年5月25日 下午10:50:01 * */ public class KruskalMST

ACM:最小生成树,kruskal && prim,并查集

题目: 输入顶点数目,边的数目,输入每条边的两个顶点编号还有每条边的权值,求最小生成树,输出最小生成树的权值.. 注意:prim算法适合稠密图,其时间复杂度为O(n^2),其时间复杂度与边得数目无关,而kruskal算法的时间复杂度为O(eloge)跟边的数目有关,适合稀疏图. kruskal----归并边:prim----归并点 方法一:kruskal,克鲁斯卡尔,并查集实现. #include <iostream> #include <algorithm> using name

【BZOJ】1016: [JSOI2008]最小生成树计数 深搜+并查集

最小生成树计数 Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的).由于不同的最小生成树 可能很多,所以你只需要输出方案数对31011的模就可以了. Input 第 一行包含两个数,n和m,其中1<=n<=100; 1<=m<=1000; 表示该无向图的节点数和边数.每个节点用1~n的整数编号.接下来的m行,每行包含两个整数:a,

Kruskal算法(贪心+并查集=最小生成树)

http://www.51nod.com/ Kruskal算法的高效实现需要一种称作并查集的结构.我们在这里不介绍并查集,只介绍Kruskal算法的基本思想和证明,实现留在以后讨论. Kruskal算法的过程: (1) 将全部边按照权值由小到大排序. (2) 按顺序(边权由小到大的顺序)考虑每条边,只要这条边和我们已经选择的边不构成圈,就保留这条边,否则放弃这条边. 算法 成功选择(n-1)条边后,形成一个棵最小生成树,当然如果算法无法选择出(n-1)条边,则说明原图不连通. 以下图为例: 边排

【笔记】并查集

描述:并查集是一种对集合进行合并.查询等一系列操作.时间复杂度为O(a(n)) 比O(logn)还快. 代码: 1 int fa[sz];//集合数组 2 void init()//预处理 3 { 4 for(int i=1;i<=n;i++) 5 { 6 fa[i]=i;//初始时每个点都是一个独立的集合 7 rank[i]=0;//按秩合并 初始时每一个集合形成的树的高度为0: 8 } 9 } 10 int find(int x)//查询操作 返回x所在集合的代表元素 11 { 12 ret