Drivers Dissatisfaction 最小生成树+LCA】的更多相关文章

题意:给一张n个点m条边的连通图,每条边(ai,bi)有一个权值wi和费用ci, 表示这条边每降低1的权值需要ci的花费.现在一共有S费用可以用来降低某些边的权值 (可以降到负数),求图中的一棵权值和最小的生成树并输出方案 显然是找到一条边然后将这条边减到最小 先跑一边最小生成树,找到树上最小的一点,然后在枚举其他的边, 加上这条边会产生一个环,所以需要删除这个环上面权值最大的边 这个通过类似于LCA倍增的手法做到, #include <cstdio> #include <cstring…
F. Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output In one kingdom there are n cities and m two-way roads. Each road connects a pair of cities, and for each road we…
Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output In one kingdom there are n cities and m two-way roads. Each road connects a pair of cities, and for each road we kno…
F - Drivers Dissatisfaction 题目大意:给你n个点,m条边,每个边都有一个权重w,每条边也有一个c表示,消耗c元可以把这条边的权重减1,求最多消耗s元的最小生成树. 思路:因为一条边的权重没有下限所以s元肯定是用在一条边上的. 那么我们先跑一个最小生成树,把这棵最小生成树建出来,然后我们枚举用了 s元之后的边,如果这条边不在树上那么加上这条边之后肯定形成了一个环,最优的方案肯定是删掉这个环中权值最大的边再次变成一棵树. 对于边(u,v)来说,如果把这条边加上,那么删掉的…
官方题解: If you choose any n - 1 roads then price of reducing overall dissatisfaction is equal to min(c1, c2, ..cn - 1) where сi is price of reducing by 1 dissatisfaction of i-th edge. So the best solution is to choose one edge and reduce dissatisfactio…
http://codeforces.com/problemset/problem/733/F (题目链接) 题意 给出一张n个点的无向图,每一条变有两个特征值:${w,c}$:分别表示这条边的权值为${w}$,每将这条边的权值减小1需要充${c}$元钱.初始时有${S}$元钱,你可以对任意边充钱使得它的权值${w}$减少,甚至减成负数.现在需要你选出若干条边,使得所有的点都联通并且这些边的权值和在“充了钱”之后最小. Solution codeforces上的题目真是良心题. 想一想,假设我们已…
这是一道写起来比较顺手的题目 没有各种奇怪的细节,基本就是Kruskal和倍增LCA的模板.. 题目大意:对于一个无向带权图,询问两点之间一条路,使得这条路上的最长边最小,输出最小最长边的的值 那么既然要使最长边最短,我们可以先构造一棵最小生成树 由于kruskal已经将边排了序了,所以对于这棵树,每条边都尽量最短了 然后我们再进行lca求出两点路径上的最长边,即为答案 #include<stdio.h> #include<string.h> #include<algorit…
题意:有n个点,m条边,每条边有不满意度w[i],以及减小一个不满意度代价c[i],问给你s元用来减少代价,找到一个总不满意度最小的生成树,保证有解.(减少后的不满意度可以为负数)思路:显然所有的钱都应该用在生成树中c最小的那条边上先求出以w[i]为权的最小生成树O(nlogn)答案一定是在现在求出的最小生成树基础上换掉一条边 或 不变把所有边进行替换尝试,找到换掉后的最优解.(可以只尝试c不大于mst中最小的c的边)添加一条边后需要尝试换掉,与该边组成环后的最大权的边,找最大权就是找新增边的两…
http://codeforces.com/gym/101889 I 先跑一遍最小生成树,把经过的边和答案记录下来 对于每个询问的边,显然如果处于MST中,答案不变 如果不在MST中,假设这条边连上了,那么就会和原本的MST形成环,删除这个环中权值最大的边就是答案 处理的时候,可以用LCA维护MST:给出边的两个节点u.v,那么u和v的LCA路径上的最大值边就是环中权值最大的边 代码: #include <iostream> #include <cstring> #include…
http://codeforces.com/contest/733/problem/F 题意:给你一些城市和一些路,每条路有不满意程度和每减少一点不满意程度的花费,给出最大花费,要求找出花费小于s的最小生成树中最小的不满意程度 题解:首先明确的是肯定只删除一条路然后其他的找最小生成树即可,但是直接搞复杂度O(m*mlogm)所以先prim扣出一颗最小生成树,然后枚举所有边删这条边,如果在最小生成树上,直接减到贡献即可,如果不在最小生成树上,那么加上这条边,树肯定有环了,我们用lca暴力的扣出这个…