比赛 26暑假集训模拟赛3 评测结果 AAAAAAAAAAATTTTTTTTA
题目名称 城市建设 最终得分 60
用户昵称 exil 运行时间 46.563 s
代码语言 C++ 内存使用 4.48 MiB
提交时间 2026-07-06 10:37:31
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    struct node{
        int l,r,v;
    };
    node xu[50005];
    node bian[50005];
    int fa[20005];
    bool cmp(node a,node b){
        return a.v<b.v;
    }
    int find(int x){
        if(fa[x]!=x)fa[x]=find(fa[x]);
        return fa[x];
    }
    signed main(){
        
        freopen("hnoi2010_city.in","r",stdin);
        freopen("hnoi2010_city.out","w",stdout);
        
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        
        int n,m,q;
        cin>>n>>m>>q;
        
        for(int i = 1;i<=m;i++){
            cin>>xu[i].l>>xu[i].r>>xu[i].v;
        }
        //sort(xu+1,xu+1+m,cmp);
        for(int j = 1;j<=q;j++){
            int l,r;
            cin>>l>>r;
            xu[l].v=r;
            for(int i = 1;i<=n;i++)fa[i]=i;
            for(int i = 1;i<=m;i++)bian[i].l=xu[i].l,bian[i].r=xu[i].r,bian[i].v=xu[i].v;
            sort(bian+1,bian+1+m,cmp);
            int bbian=0,ans=0;
            for(int i = 1;i<=m;i++){
                int ll=find(bian[i].l),rr=find(bian[i].r);
                if(ll==rr)continue;
                ans+=bian[i].v;
                fa[rr]=ll;
                bbian++;
                if(bbian==n-1)break;
            }
            cout<<ans<<endl;
        }
        return 0;
    }