【bzoj2001】 Hnoi2010—City 城市建设】的更多相关文章

2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec  Memory Limit: 162 MB Description PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国内所有的城市连通.但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,Louis会不断得到某道路的修建代价改变的消息,他希望每得到一条消息后能立…
题目链接 BZOJ2001 题解 CDQ分治神题... 难想难写.. 比较朴素的思想是对于每个询问都求一遍\(BST\),这样做显然会爆 考虑一下时间都浪费在了什么地方 我们每次求\(BST\)实际上就只有一条边不同,我们实际浪费了很多时间在处理相同的边上 那就考虑分治 对于一个待修改的边集,我们将其权值全部设为\(-\infty\),跑一遍\(BST\),此时其它边如果被选中,说明这些边在单独询问时也一定会被选,将这些边连的点缩点 同样,对于一个待修改的边集,我们将其权值全部设为\(\inft…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2001 cdq分治+重建图. 可以保留当前一定会被选的非修改边然后把点缩起来.这样的话每次点数至多只有r-l+1个,边数只有2*(r-l+1)-1个(生成树+修改边). 时间复杂度O(nlog^2(n)) #include<cstring> #include<iostream> #include<cstdio> #include<algorithm> #d…
BZOJ2001 [Hnoi2010]City 城市建设 Solution 我们考虑一下这个东西怎么求解? 思考无果...... 咦? 好像可以离线cdq,每一次判断一下如果这条边如果不选就直接删除,然后不确定的保留,必须选的就去确定连通性. 然后可以了? 好妙啊.cdq果然还是万金油. 代码实现 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include…
2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1132  Solved: 555[Submit][Status][Discuss] Description PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国内所有的城市连通.但是由于某些因素,城市之间修建道路需…
http://www.lydsy.com/JudgeOnline/problem.php?id=2001 (题目链接) 题意 给出一张无向图,$m$组操作,每次修改一条边的权值,对于每次操作输出修改之后的图的最小生成树边权和. Solution nnd开了半个小时的脑洞,然并卵.感谢这位大爷的代码与题解:http://blog.csdn.net/u013368721/article/details/39183033 我们对时间cdq分治,如何在每一层向下递归的时候减小问题规模呢,两个关键的操作:…
DescriptionPS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国内所有的城市连通.但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,Louis会不断得到某道路的修建代价改变的消息,他希望每得到一条消息后能立即知道使城市连通的最小花费总和, Louis决定求助于你来完成这个任务.Input文件第一行包含三个整数N,M,Q,分别表示城市的数目,…
Description PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国内所有的城市连通.但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,Louis会不断得到某道路的修建代价改变的消息,他希望每得到一条消息后能立即知道使城市连通的最小花费总和, Louis决定求助于你来完成这个任务. Input 文件第一行包含三个整数N,M,Q,分别表示城市的…
问题: 给一张图,支持边长度修改,求MST 题解: 自己想就想不到了.. 考虑cdq分治 1.首先求出一定有用的边 对于未处理的边,全部设为-INF,求一次MST,出现在MST上的边一定最终出现在后面的MST上 2.然后求出一定无用的边 对于未处理的边,全部设为INF,求一次MST,不在MST上的边一定不会出现在后面的MST上 这两点非常好证明 然后来观察一下时间复杂度 对于1,求出了一定有用的边,那至少有n-[区间长度]条(因为至少有n-1条边) 我们把它们缩点,这样之后,点数就保证和区间长度…
Description \(n\) 个点 \(m\) 条边的带边权无向图.\(q\) 次操作,每次修改一条边的权值. 求每次修改后的最小生成树的边权和. Hint \(1\le n\le 2\times 10^4, 1\le m, q\le 5\times 10^4, 1\le \text{边权}\le 5\times 10^7\) Solution 考虑对时间进行分治,\(\textbf{solve}(l, r)\) 表示处理第 \(l\) 到第 \(r\) 个操作,并对原图生效这些修改的过程…