比赛 26暑假集训模拟赛3 评测结果 AWWWWWWWWWWWWTTTTTTW
题目名称 城市建设 最终得分 5
用户昵称 PXCZM 运行时间 34.591 s
代码语言 C++ 内存使用 3.96 MiB
提交时间 2026-07-06 11:24:13
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,q;
struct edge
{
    int u,v,w,idx;
}e[50010];
bool cmp(const edge& s1,const edge& s2)
{
    return s1.w<s2.w;
}
int f[20010],siz[20010];
int find(int x)
{
    if(f[x]==x) return x;
    else return f[x]=find(f[x]);
}
int main()
{
    freopen("hnoi2010_city.in","r",stdin);
    freopen("hnoi2010_city.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>m>>q;
    for(int i=1;i<=m;i++)
    {
        cin>>e[i].u>>e[i].v>>e[i].w;
        e[i].idx=i;
    }
    sort(e+1,e+1+m,cmp);
    while(q--)
    {
        int x,y; cin>>x>>y;
        for(int i=1;i<=m;i++)
            if(e[i].idx==x)
            {
                x=i;
                e[i].w=y;
            }
        for(int i=x;i>1&&e[i].w<e[i-1].w;i--) swap(e[i],e[i-1]);
        for(int i=x;i<m&&e[i].w>e[i+1].w;i++) swap(e[i],e[i+1]);
        for(int i=1;i<=n;i++)
        {
            f[i]=i;
            siz[i]=1;
        }
        ll ans=0;
        for(int i=1;i<=m;i++)
        {
            int u=e[i].u,v=e[i].v;
            int fu=find(u),fv=find(v);
            if(fu==fv) continue;
            if(siz[fu]<siz[fv]) swap(fu,fv);
            f[fv]=fu;
            siz[fu]+=siz[fv];
            ans+=e[i].w;
        }
        cout<<ans<<'\n';
    }
    return 0;
}