Problem
【HNOI2010】城市建设
Description
是一个拥有诸多城市的大国,国王为城市的交通建设可谓绞尽脑汁。可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费。希望建造最少的道路使得国内所有的城市连通。但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,会不断得到某道路的修建代价改变的消息,他希望每得到一条消息后能立即知道使城市连通的最小花费总和,决定求助于你来完成这个任务。
Input
第一行三个整数,分别表示城市的数目,可以修建的道路个数,收到的消息个数。
接下来行,第行有三个用空格隔开的整数(),表示在城市与城市之间修建道路的代价为。
接下来行,每行包含两个数,表示输入的第个道路的修建代价修改为(即将修改为)。
Output
Sample Input
1 | 5 5 3 |
Sample Output
1 | 14 |
HINT
对于的数据, ,,。
另有的数据,,,,且保证修改后的代价不会比之前的代价低。
对于的数据,,,。
标签:CDQ分治
MST
Solution
考虑对时间进行分治。对于分治到的每一个时间区间,确定必须存在的边并加入答案,删除一定不存在的边,再向下递归两个子区间。主要有两种操作:
- :将会在该区间中被修改的边权值设为,跑,这时在最小生成树上且边权不为的边一定会存在于该区间所有时间点的最小生成树中。于是从边集中删除这些边,并将这些边连接的点合并。
- :将会在该区间中被修改的边权值设为,跑,这时不在最小生成树上且边权不为的边一定不会存在于该区间所有时间点的最小生成树中。于是从边集中删除这些边即可。
和点的合并可以用并查集维护,需要维护表示编号为的点在当前边集中的位置,以实现快速更改该区间中被修改的边的权值。对每个区间进行如上两种操作,递归处理左右区间,到底部时跑统计答案即可。
Code
1 |
|