BZOJ2521 最小生成树 最小割】的更多相关文章

5.26 T2:最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的最小生成树.例如,下面图 3中所示的都是图 2中的无向图的最小生成树: 当然啦,这些都不是今天需要你解决的问题.Secsa想知道对于某一条无向图中的边AB,至少需要多少代价可以保证AB边在这个无向图的最小生成树中.为了使得AB边一定在最小生成树中,你可以对这…
[BZOJ2521][Shoi2010]最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的最小生成树.例如,下面图 3中所示的都是图 2中的无向图的最小生成树: 当然啦,这些都不是今天需要你解决的问题.Secsa想知道对于某一条无向图中的边AB,至少需要多少代价可以保证AB边在这个无向图的最小生成树中.为了使得AB边一定在…
2521: [Shoi2010]最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 415  Solved: 242[Submit][Status][Discuss] Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的最小生成树.例如,下面图 3中所示的都是图 2中的无向图的最小…
Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的最小生成树.例如,下面图 3中所示的都是图 2中的无向图的最小生成树: 当然啦,这些都不是今天需要你解决的问题.Secsa想知道对于某一条无向图中的边AB,至少需要多少代价可以保证AB边在这个无向图的最小生成树中.为了使得AB边一定在最小生成树中,你可以对这个无向图进行操作,一次单独的…
题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的最小生成树.例如,下面图 3中所示的都是图 2中的无向图的最小生成树: 当然啦,这些都不是今天需要你解决的问题.Secsa想知道对于某一条无向图中的边AB,至少需要多少代价可以保证AB边在这个无向图的最小生成树中.为了使得AB边一定在最小生成树中,你可以对这个无向图进行操作,一次单独的操作是指:先选…
题目描述 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上? 输入 第一行包含用空格隔开的两个整数,分别为N和M:接下来M行,每行包含三个正整数u,v和w表示图G存在一条边权为w的边(u,v).最后一行包含用空格隔开的三个整数,分别为u,v,和 L:数据保证图中没有自环. 输出…
U,V能在最小(大)生成树上,当且仅当权值比它小(大)的边无法连通U,V. 两次最小割就OK了. --------------------------------------------------------------------- #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<vector> #include<que…
[BZOJ2561]最小生成树 Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上? Input 第一行包含用空格隔开的两个整数,分别为N和M: 接下来M行,每行包含三个正整数u,v和w表示图G存在一条边权为w的边(u,v). 最后一行包含用空格隔开的三个整…
题目链接 一条边不变其它边减少可以看做一条边增加其它边不变. 假设要加的边lab为(A->B,v),那么肯定是要使除这条边外,A->B的每条路径上的最小权值都\(>v\),这样在连通A,B时(即Kruskal中Union())才一定会选择这条边. 要求路径上最小边的权值\(>v\),即要求在路径上有任意一边权值\(\leq v\)时不连通.于是求最小割(使它不连通),割掉一条边的代价即\(v[lab]-v[i]+1\). 无向图建双向边. status里的怎么都那么快?复制了一份2…
http://www.lydsy.com/JudgeOnline/problem.php?id=2521 题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里 思路:如果两个点中有环,那么这条边必须不能是环的最大边,这样子把之前所有的边权值变成V+1-v[i],无向图网络流就可以了 #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include&l…
题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的最小生成树.例如,下面图 3中所示的都是图 2中的无向图的最小生成树: 当然啦,这些都不是今天需要你解决的问题.Secsa想知道对于某一条无向图中的边AB,至少需要多少代价可以保证AB边在这个无向图的最小生成树中.为了使得AB边一定在最小生成树中,你可以对这个无向图进行操作,一次单独的操作是指:先选…
BZOJ_2561_最小生成树_最小割 题意: 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上? 分析: 如果所有边中有能使u,v连通且权值比L小的,那新加的这条边就不会出现在最小生成树上,最大生成树同理,那么问题就转化成求u,v之间的最小割,最小和最大分别做一次,相加即可.…
https://www.lydsy.com/JudgeOnline/problem.php?id=2561 考虑Kruscal算法求最小生成树的流程 如果 u和v之间的长为L的边能出现在最小生成树里,说明<L的边不能时u和v联通 即求图中只存在<L的边时,u和v的最小割 如果 u和v之间的长为L的边能出现在最大生成树里,说明>L的边不能时u和v联通 即求图中只存在>L的边时,u和v的最小割 #include<cstdio> #include<queue> #…
考虑kruskal的过程:按边权从小到大考虑,如果这条边的两端点当前不连通则将其加入最小生成树.由此可以发现,某条边可以在最小生成树上的充要条件是其两端点无法通过边权均小于它的边连接. 那么现在我们需要删一些边使两点不连通,显然是最小割.对最小和最大分别做一次即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #in…
2561: 最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2685  Solved: 1253[Submit][Status][Discuss] Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上…
题目描述 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上? 输入 第一行包含用空格隔开的两个整数,分别为N和M:接下来M行,每行包含三个正整数u,v和w表示图G存在一条边权为w的边(u,v).最后一行包含用空格隔开的三个整数,分别为u,v,和 L:数据保证图中没有自环. 输出…
题目 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上? 输入格式 第一行包含用空格隔开的两个整数,分别为N和M: 接下来M行,每行包含三个正整数u,v和w表示图G存在一条边权为w的边(u,v). 最后一行包含用空格隔开的三个整数,分别为u,v,和 L: 数据保证图中没有自环.…
看错题了以为多组询问吓得不行-- 其实还挺好想的,就是数据范围一点都不网络流.把U作为s,V作为t,以最小生成树为例,(U,V,L)要在最小生成树上,就要求所有边权比L小的边不能连通(U,V)所在的联通块.这样一来模型就很显然了,就是对所有边权<L的边建边(u,v,1)(v,u,1),然后最小割即可.建双向边是因为反正只会割掉一条-- #include<iostream> #include<cstdio> #include<cstring> #include<…
最小生成树 bzoj-2561 题目大意:题目链接. 注释:略. 想法: 我们发现: 如果一条权值为$L$的边想加入到最小生成树上的话,需要满足一下条件. 就是求出原图的最小生成树之后,这个边当做非树边的情况下覆盖的边的最小值不可以比$L$小. 如此,我们级就可以通过网络流来求了. 对于每一条比$L$小的边,我们连双向边,求当前边$u,v$的最小割即可. 如果是最大生成树的话同理,我们只需要把所有比当前加入的边的权值小的边在网络流中连无向边,然后跑最小割即可. Code: #include <i…
正题 题目链接:https://www.luogu.com.cn/problem/P5934 题目大意 给出\(n\)个点\(m\)条边的一张图,再加入一条边\((u,v,L)\)求至少删掉多少条边可以使得这条边即在最小生成树上又在最大生成树上. \(1\leq n\leq 2\times 10^4,1\leq m\leq 2\times 10^5\) 解题思路 稍微思考一下就不难发现这两个问其实是没有影响的,因为第一个问显然只需要删去边权小于\(L\)的,第二个问显然只需要删去边权大于\(L\…
题意 对于某一条无向图中的指定边 \((a, b)\) , 求出至少需要多少次操作.可以保证 \((a, b)\) 边在这个无向图的最小生成树中. 一次操作指: 先选择一条图中的边 \((u, v)\), 再把图中除了这条边以外的边, 每一条的权值都减少 \(1\) . \(n \le 500, m \le 800, 1 \le w_i < 10^6\) 题解 给除了一条边的所有边权 \(-1\) ,相当于给这条边的边权 \(+1\) . 利用生成树的结论,一条边 \(u \to v\) (权值…
链接 BZOJ 2561 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割: 对于最大生成树的情况也一样.容易看出两个子问题是各自独立的,把两个最小割相加即可. #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> using…
2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2561 Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条…
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集:最小割集当然就权和最小的割集. prim算法不仅仅可以求最小生成树,也可以求"最大生成树".最小割集Stoer-Wagner算法就是典型的应用实例. 求解最小割集普遍采用Stoer-Wagner算法,不提供此算法证明和代码,只提供算法思路: 1.min=MA…
题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算法,算法总复杂度也要O(n4).所以用网络流算法求解最小割集复杂度不会低于O(n4).所以就要用Stoer_Wagner算法.算法复杂度为O(n3).如果加堆优化,复杂度会降为O(n2logn). Stoer_Wagner算法: Stoer_Wagner算法是求无向图全局最小割的一个有效算法,最坏时…
之前在网上搜了一个下午没搜到这道题的题解,然后同时又对着叉姐写的两行字题解看了一个下午: 虽然基本上已经知道了这题的思路,但愣是因为自己代码实现起来太繁复,外加不确定正确性,没敢码…… 但是一道题肝了一下午没肝出来,就要放弃的话,怕是太扎心了,忍不住就跑去ICPCCamp.Post问叉姐了(https://post.icpc-camp.org/d/715-2017-b-roads) 看了叉姐的对于我的几个问题的回复,我总算肯定了我的思路,而且叉姐还在下面给了标程,当时可以说心情非常愉悦: 听起来…
题面 传送门 思路 首先我们明确一点:这道题不是让你把$n^2$个最小割跑一遍[废话] 但是最小割过程是必要的,因为最小割并没有别的效率更高的算法(Stoer-Wagner之类的?) 那我们就要尽量找办法减少做最大流(求最小割)的次数 最小割树 就像最小生成树一样,最小割也有自己的生成树 我们新建立一个有n个点,没有边的无向图 我们在原无向图中任选两个点S,T,求出S-T最小割,那么可以在S-T中间加一条权值等于最小割值得无向边 然后,分别对S属于的点集合和T属于的点集合递归做上面的过程,直到当…
题面 传送门 思路 首先我们明确一点:这道题不是让你把$n^2$个最小割跑一遍[废话] 但是最小割过程是必要的,因为最小割并没有别的效率更高的算法(Stoer-Wagner之类的?) 那我们就要尽量找办法减少做最大流(求最小割)的次数 最小割树 就像最小生成树一样,最小割也有自己的生成树 我们新建立一个有n个点,没有边的无向图 我们在原无向图中任选两个点S,T,求出S-T最小割,那么可以在S-T中间加一条权值等于最小割值得无向边 然后,分别对S属于的点集合和T属于的点集合递归做上面的过程,直到当…
http://  blog.sina.com.cn/s/blog_700906660100v7vb.html 转载:http://www.cnblogs.com/ylfdrib/archive/2010/08/17/1801784.html [ZZ]最小割集Stoer-Wagner算法 一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集:最小割集当然就权和最小的割集. 可以用最小切割最大流定理: 1.min=MAXINT,确定一个源点 2.枚举汇点 3.计算最大流,并确定当…
最标准的最小割算法应用题目. 核心思想就是缩边:先缩小最大的边.然后缩小次大的边.依此缩小 基础算法:Prime最小生成树算法 只是本题測试的数据好像怪怪的,相同的算法时间执行会区别非常大,并且一样的代码替换.竟然会WA.系统出错的几率非常小.难倒測试系统本题会有错误? 懒得继续測试这道题的系统了,反正算法正确.AC. #include <stdio.h> #include <string.h> #include <limits.h> const int MAX_N =…