比赛 26暑假集训模拟赛3 评测结果 AAAAAAAAAAATTTTTTTTA
题目名称 城市建设 最终得分 60
用户昵称 dream 运行时间 42.487 s
代码语言 C++ 内存使用 3.99 MiB
提交时间 2026-07-06 10:20:11
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=20001,M=50001,Q=50001;
typedef long long ll;
int val[M];
struct que{
	int k;
	int d;
}q[Q];
struct edge{
	int x,y,id;
	bool operator<(const edge &t) const{
        return val[id]<val[t.id];
	}
}e[M];
int n,m,qq;
int f[N];
void init(){
	for(int i=1;i<=n;i++) f[i]=i;
}
int find(int x){
	if(x==f[x]) return x;
	return f[x]=find(f[x]);
}
ll kruskal(){
	init();
	sort(e+1,e+m+1);
	int cnt=0;
	ll sum=0;
	for(int i=1;i<=m;i++){
		int fx=find(e[i].x),fy=find(e[i].y);
		if(fx==fy) continue;
		f[fy]=fx;
		cnt++;
		sum+=val[e[i].id];
		if(cnt==n-1) return sum;
	}
}
int main(){
    freopen("hnoi2010_city.in","r",stdin);
    freopen("hnoi2010_city.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m>>qq;
    for(int i=1;i<=m;i++){
    	int x,y,z;
    	cin>>x>>y>>z;
    	val[i]=z;
    	e[i]={x,y,i};
	}
	int f=1;
	for(int i=1;i<=qq;i++){
		int k,d;
		cin>>k>>d;
		q[i]={k,d};
		if(d<val[k]) f=0;
	}
	if(f){
		ll ans=kruskal();
		for(int i=1;i<=qq;i++){
			cout<<ans<<"\n";
		}
	}
	else{
		for(int i=1;i<=qq;i++){
			val[q[i].k]=q[i].d;
			cout<<kruskal()<<"\n";
		}		
	}
    return 0;
}