Untitled

 avatar
unknown
plain_text
20 days ago
1.8 kB
3
Indexable
    // ThonqRiu
    #include <bits/stdc++.h>
    #define endl '\n'
    #define maxn 50005
    #define MOD 100000000000007
    #define Task "bai1"
    #define ll long long
    using namespace std;
    int n,m,root[505],cnt;
    struct phuba{
        int u,v,w;
    };
    phuba a[maxn];
    bool cmp(phuba &a, phuba &b){
        return a.w < b.w;
    }
    int getRoot(int u){
        if(root[u] == 0) return u;
        return(root[u] = getRoot(root[u]));
    }
    int main()
    {
        ios_base:: sync_with_stdio(0);
        cin.tie(nullptr);
        if(fopen(Task".inp","r")){
            freopen(Task".inp","r",stdin);
        }
        cin >> n >> m;
        for(int k = 1; k<=m; k++){
            cin >> a[++cnt].u >> a[cnt].v >> a[cnt].w;
//            if(cnt < n - 1){
//                cout << -1 << endl;
//                continue;
//            }
            int i = cnt - 1,dem = cnt;
            while (i >= 1 && a[dem].w < a[i].w) {
                swap(a[dem], a[i]);
                dem--;
                i--;
            }
            fill(root+1,root+n+1,0);
            int ans = 0; cnt = 0;
            for(int i = 1; i<=n; i++){
                int p = getRoot(a[i].u);
                int q = getRoot(a[i].v);
                if(p != q){
                    root[p] = q;
                    ans += a[i].w;
                    cnt++;
                    a[cnt].u = a[i].u; a[cnt].v = a[i].v; a[cnt].w = a[i].w;
                }
            }
//                cout << cnt << endl;
//                for(int i = 1; i<= cnt; i++){
//                    cout << a[i].u << " " << a[i].v << " " << a[i].w << endl;
//                }
//                cout << endl << endl;
            if(cnt == n-1) cout << ans << endl; else cout << -1 << endl;
        }

    }
Leave a Comment