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