| 比赛 |
26暑假集训模拟赛3 |
评测结果 |
AAAAAAAAAAATTTTTTTTA |
| 题目名称 |
城市建设 |
最终得分 |
60 |
| 用户昵称 |
rzzakioi |
运行时间 |
45.422 s |
| 代码语言 |
C++ |
内存使用 |
5.17 MiB |
| 提交时间 |
2026-07-06 11:03:23 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q,fa[20005],t[100005];
struct node{
int x,y,z,id;
bool flag;
}a[100005];
bool operator <(const node &u,const node &v){
return u.z<v.z;
}
int Find(int x){
if(x==fa[x])return x;
return fa[x]=Find(fa[x]);
}
//vector<node>v[20005];
signed main(){
freopen("hnoi2010_city.in","r",stdin);
freopen("hnoi2010_city.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&q);
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
a[i].id=i;
// v[a[i].x].push_back(a[i]);
}
for(int i=m+1;i<=2*m;i++){
a[i]=a[i-m];
swap(a[i].x,a[i].y);
a[i].id=i-m;
// v[a[i].y].push_back(a[i]);
}
m*=2;
sort(a+1,a+m+1);
for(int i=1;i<=n;i++)fa[i]=i;
int ans=0;
for(int i=1;i<=m;i++){
if(Find(a[i].x)!=Find(a[i].y)){
fa[Find(a[i].x)]=Find(a[i].y);
ans+=a[i].z;
a[i].flag=1;
}
}
// if(n<=1000&&m<=12000&&q<=6000){
while(q--){
int k,d;
scanf("%lld%lld",&k,&d);
for(int i=1;i<=m;i++){
if(a[i].id==k)a[i].z=d;
}
sort(a+1,a+m+1);
int ans=0;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
if(Find(a[i].x)!=Find(a[i].y)){
fa[Find(a[i].x)]=Find(a[i].y);
ans+=a[i].z;
}
}
printf("%lld\n",ans);
}
// }
// else{
// while(q--){
// int k,d;
// scanf("%lld%lld",&k,&d);
// for(int i=1;i<=m;i++){
// if(a[i].id==k){
// int his=a[i].z;
// a[i].z=d;
// if(a[i].z<his){
// for(int j=0;j<v[a[i].x].size();j++){
//
// }
// }
// if(a[i].flag){
//
// }
// }
// }
// }
// }
return 0;
}