| 比赛 |
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;
}