博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hnoi2010 City 城市建设
阅读量:5124 次
发布时间:2019-06-13

本文共 1372 字,大约阅读时间需要 4 分钟。

题目

PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁。Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费。Louis希望建造最少的道路使得国内所有的城市连通。但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,Louis会不断得到某道路的修建代价改变的消息,他希望每得到一条消息后能立即知道使城市连通的最小花费总和, Louis决定求助于你来完成这个任务。

思路

代码

#include
#define M 50005#define LL long longusing namespace std;const LL inf=1e9;int n,m,Q;struct S{ int fa[M],rk[M],top; struct node{int x,y;}stk[M]; void Init(){ for(int i=1;i<=n;i++)fa[i]=i,rk[i]=1;top=0; } int getfa(int x){ return fa[x]==x?x:getfa(fa[x]); } void Union(int x,int y){ int rtx=getfa(x),rty=getfa(y); if(rtx==rty)return; if(rk[rtx]
wk,tmp;LL ans[M];bool mark[M],used[M];struct node{int id;LL v;}A[M];void Reduction(int l,int r){ for(int i=l;i<=r;i++)mark[A[i].id]=1; for(int i=0;i
bc=wk; int ned=bcj.top; co+=Contraction(l,r);Reduction(l,r); int mid=(l+r)>>1; solve(l,mid,co);solve(mid+1,r,co); while(bcj.top!=ned)bcj.undo(); wk=bc;bc.clear();}int main(){ scanf("%d%d%d",&n,&m,&Q);bcj.Init(); for(int i=1;i<=m;i++){ scanf("%d%d%lld",&E[i].x,&E[i].y,&E[i].v);E[i].id=i; wk.push_back(E[i]); } for(int i=1;i<=Q;i++)scanf("%d%lld",&A[i].id,&A[i].v); solve(1,Q,0); for(int i=1;i<=Q;i++) printf("%lld\n",ans[i]); return 0;}

转载于:https://www.cnblogs.com/zryabc/p/11202102.html

你可能感兴趣的文章
redis 批量删除操作
查看>>
Python爬虫爬取美剧网站
查看>>
SQL Server执行计划那些事儿(3)——书签查找
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
ubuntu下sogou突然不能用
查看>>
Linux 普通用户拿到root权限及使用szrz命令上传下载文件
查看>>
联合体union
查看>>
人物角色群体攻击判定(一)
查看>>
JavaWeb学习过程 之c3p0的使用
查看>>
MySql Delimiter
查看>>
一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
查看>>
使用客户端对象模型读取SharePoint列表数据
查看>>
NYOJ 289 苹果(01背包)
查看>>
【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)
查看>>
Day39:threading模块、ThreadLocal
查看>>
[Leveldb源码剖析疑问]-block_builder.cc之Add函数
查看>>
POJ 1328 Radar Installation 贪心
查看>>
约法三章
查看>>
canvas合成图片 圣诞节新技能戴帽
查看>>