Life is a Game 题解(启发式合并)
题目链接
题目思路
查询和修改都离线操作
然后查询使用优先队列进行启发式合并即可
代码
#include
#define fi first
#define se second
#define debug cout<<"I AM HERE"<b.k;
}
};
priority_queue pq[maxn];
signed main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
fa[i]=i;
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
sort(e+1,e+1+m,cmp);
for(int i=1,x,k;i<=q;i++){
scanf("%d%d",&x,&k);
pq[x].push({k,i});
}
for(int i=1;i<=m;i++){
int u=findd(e[i].u);
int v=findd(e[i].v);
if(u==v) continue;
while(!pq[u].empty()&&pq[u].top().k+a[u]