POJ1861 Network (Kruskal算法 +并查集)】的更多相关文章

Network Description Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the company, they can be connected to each other using cables. Since each worker of the company must have…
最小生成树——Minimum Spanning Tree,是图论中比较重要的模型,通常用于解决实际生活中的路径代价最小一类的问题.我们首先用通俗的语言解释它的定义: 对于有n个节点的有权无向连通图,寻找n-1条边,恰好将这n个节点相连,并且这n-1条边的权值之和最小. 对于MST问题,通常常见的解法有两种:Prim算法   或者  Kruskal算法+并查集 对于最小生成树,一定要注意其定义是在无向连通图的基础上,如果在有向图中,那么就需要另外的分析,单纯用无向图中的方法是不能得出正确解的,这一…
并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每个点只保存祖先,不保存父亲) 最小生成树kruskal:贪心算法+并查集数据结构,根据边的多少决定时间复杂度,适合于稀疏图 核心思想贪心,找到最小权值的边,判断此边连接的两个顶点是否已连接,若没连接则连接,总权值+=此边权值,已连接就舍弃继续向下寻找: 并查集数据结构程序: #include<ios…
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> using namespace std; #define MAX 80000 int father[MAX], son[MAX]; int v,v2, l; struct Kruskal //存储边的信息 { int a; int b; int value; }; b…
时限: 1000MS   内存限制: 10000K 提交总数: 37001   接受: 17398 描述 热带岛屿拉格里山的首长有个问题.几年前,大量的外援花在了村庄之间的额外道路上.但是丛林不断地超越道路,因此庞大的道路网太昂贵而无法维护.老年人理事会必须选择停止维护一些道路.左上方的地图显示了目前正在使用的所有道路,以及每月维护这些道路的费用.当然,即使路线不像以前那么短,也需要采取某种方式在所有村庄之间保持通行.长老院长想告诉长老委员会每月要花多少钱才能维持连接所有村庄的道路.在上面的地图…
传送门 一道:LCA+最大生成树 个人认为把这两个的板子写好(并熟练掌握了之后)就没什么难的 (但我还是de了好久bug)qwq 最大生成树:其实就是最小生成树的变形 我用的是kruskal (个人觉得kruskal比较好像and好写) 所以 对于kruskal而言 只是把边从小到大排序改成从大到小序就可以了 需要多维护一个w[ i ][ j ]数组 用来存从i点向上走j^2次步这个过程中最大承重量 透 又是数组开小了 (明明我算的不用那么大的啊qwq) 向现实低头 #include<cstdi…
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1123  Solved: 408 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=2342 Description 输入分为两行,第一行为一个整数n,表示字符串的长度,第二行有n个连续的小写的英文字符,表示字符串的内容. Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小…
一. 离线Tarjan算法 LCA问题(lowest common ancestors):在一个有根树T中.两个节点和 e&sig=3136f1d5fcf75709d9ac882bd8cfe0cd" alt="">的近期公共祖先.指的是二者的公共祖先中深度最高的节点. 给定随意两个树中的节点,求它们的近期公共祖先. 对于二分查找树.二叉树,能够用普通的dfs实现.但对于多叉树.查询次数频繁的情况下.离线Tarjan算法的长处就显现出来了.因为对树上全部节点仅仅进…
Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14021   Accepted: 5484   Special Judge Description Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the c…
                     Corporative Network A very big corporation is developing its corporative network. In the beginning each of the N enterprisesof the corporation, numerated from 1 to N, organized its own computing and telecommunication center.Soon,…
题目链接 \(Description\) 有一张\(n\)个点\(m\)条边的无向图,每个点有点权.图是安全的当且仅当所有边的两个端点权值不同.保证初始时图是安全的. 现在有权值为\(x\)的病毒,若它感染了某个点\(a\),则该点点权变为\(a\oplus x\). 求有多少数对\((S,x)\),满足病毒的权值为\(x\),且感染了\(S\)集合中的所有点后,满足图仍是安全的. \(Solution\) 设一条边两个端点的权值为\(a,b\),病毒权值为\(x\).因为\(a\neq b,a…
#include<iostream> #include<vector> #include<string> #include<cmath> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int n, d; ][]; struct Point { double x, y; }cur[]; ]; int findRoot(i…
题意:一个企业要去收购一些公司把,使的每个企业之间互联,刚开始每个公司互相独立 给出n个公司,两种操作 E I:询问I到I它连接点最后一个公司的距离 I I J:将I公司指向J公司,也就是J公司是I公司的上级,距离为abs(I-J)%1000(貌似G++不支持abs,PE了两发) 思路:转化一下题意就行了,首先刚开始的时候每个公司都是独立的,I操作就是并查集中合并操作,将I这课树并到J这个树上, E操作要求的东西就是 I到I的根节点的距离,先看一个没有路径压缩直接暴力的方法把.(本以为不会过的,…
题意是判断两台电脑是否能通讯,两台修好的电脑距离在指定距离内可直接通讯,且两台修好的电脑能通过一台修好的电脑间接通讯.代码如下: #include <iostream> #include <cstring> #include <cstdio> using namespace std; int father[1005]; struct Coord //电脑坐标 { int x; int y; } coo[1005]; struct Repair //已修复好的电脑的坐标和…
Network Time Limit: 1000MS     Memory Limit: 30000K Total Submissions: 16047   Accepted: 6362   Special Judge Description Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the…
问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁. 地铁由很多段隧道组成,每段隧道连接两个交通枢纽.经过勘探,有m段隧道作为候选,两个交通枢纽之间最多只有一条候选的隧道,没有隧道两端连接着同一个交通枢纽. 现在有n家隧道施工的公司,每段候选的隧道只能由一个公司施工,每家公司施工需要的天数一致.而每家公司最多只能修建一条候选隧道.所有公司同时开始施工. 作为项目负责人,你获得了候选隧道的信息,现在你可以按自己的想法选择一部分隧道进行施工…
Corporative Network Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 3945   Accepted: 1416 Description A very big corporation is developing its corporative network. In the beginning each of the N enterprises of the corporation, numerated…
P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,从一个地方到另一个地方最多能运多重的货物. 说明 对于 100%的数据,0 < 城市数n < 10,000,0 < 道路数m < 50,000,0 < 询问数q< 30,000,0 ≤ 限重z ≤ 100,000. 鉴于这是个稀疏图,我们用kruskal.…
Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 22107   Accepted: 9285 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computer…
题目链接 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define N 1000010 using namespace std; struct node { int a;//端点1 int b;//端点2 int num;//权值 }; bool cmp(node x,node y)//按权值升序 { return x.num<y.num; } int…
传送门 题意简述:给一张带权无向图,有a,ba,ba,b两类特殊点和普通点,问使得至少有一个aaa和一个bbb连通所需要的所有边边权最小值的最大值是多少. 思路: 一眼发现可以二分,考虑怎么checkcheckcheck显然直接把所有大于二分值的并起来看满不满足要求. 正准备写的时候想了一个更简单的,把边排个序然后从大到小加进去直到满足题意时就是答案. 代码…
题目在这 Sample Input 4 6 1 2 1 1 3 1 1 4 2 2 3 1 3 4 1 2 4 1 Sample Output 1 4 1 2 1 3 2 3 3 4 题目意思:4个点,6个边,每个边有对应的权值.最后输出一行为路径中最大的边的值,第二行为路径上边的总数, 第三行为每条边的始末编号.题目需要求出最小生成树的最大边的最小值. /* Problem: 1861 User: Memory: 416K Time: 500MS Language: C++ Result: A…
题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0.然后进行一遍prim(2)Kruskal算法+并查集 代码: //prim写法 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <…
最近写了一个多星期的并查集,一瞬间贴出这么多解题报告,我想关于并查集的应用先告一段落吧,先总结一下. 在网上看到一篇关于并查集比较好的教程(姑且允许我这么说吧),不转过来是在可惜.献给爱学习的你 文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 等价关系与等价类 从数学上看,等价类是一个对象(或成员)的集合,在此集合中的所有对象应满足等价关系.若用符号"≡"表示集合上的等价关系,那么对于该集合中的任意对象x,y, z,下列性质…
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0,1,2,3,4,5}这样6个节点,我们知道Prim算法构建生成树是从”顶点”这个角度来思考的,然后采用“贪心思想” 来一步步扩大化,最后形成整体最优解,而Kruskal算法有点意思,它是站在”边“这个角度在思考的,首先我有两个集合. 1. 顶点集合(vertexs): 比如M集合中的每个元素都可以认…
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我们并不知道 它到底是哪一种. 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法是“1 X Y”,表示 X 和 Y 是同类. 第二种说法是“2 X Y”,表示 X 吃 Y . 此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真 的,有的是假的.当…
并查集能做什么? 1.连接两个对象; 2.查询两个对象是否在一个集合中,或者说两个对象是否是连接在一起的. 并查集有什么应用? 1. Percolation问题. 2. 无向图连通子图个数 3. 最近公共祖先问题 4. Kruskal最小生成树 5. 社交网络 等等 并查集数据结构: 并查集是一种树形的数据结构,处理不相交集合的合并和查询操作. 并查集常用的启发式策略:路径压缩,按秩合并(或按集合元素个数合并) 路径压缩是为了加快查找的效率,让树变得竟可能的平. 按秩合并(或按集合元素个数合并)…
题目链接:https://www.luogu.org/problemnew/show/P3367 思路: 今天学了新算法——并查集,本题是简单的并查集题的模板. 核心思想是“递归+压缩路径”. 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上…
P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是,距离祖先的距离是在并查集中动态更新的. 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团…
银河英雄传说 题意:在并查集的基础上,还要求出同一集合的两个点的距离 这道题用并查集自己是知道的,但是竟然可以这么骚的操作. 下面转自大佬的查详细题解 初见这道题,首先想到的方法当然是直接模拟,模拟每一次指令.当然这种方法对于小数据行得通,但对于此题的500,000个指令,肯定超时. 因此我们就要想其它方法. 先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个队列,不会出现把一个队列分开的情况,因此,我们必须要找到一个可以一次操作合并…