Submission #2891812


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

struct UnionFind {
    vector<long long> par;
    vector<long long> rank;
    vector<long long> time;
    const long long INF = 1e18;

    void initialize(long long n){
        par.resize(n);
        rank.resize(n);
        time.resize(n);
        for(long long i=0; i<n; i++){
            par[i] = i;
            rank[i] = 0;
            time[i] = INF;
        }
    }

    long long find(long long x, long long t){
        if(time[x] > t){
            return x;
        }else{
            return find(par[x], t);
        }
    }

    void unite(long long x, long long y, long long t){
        x = find(x, t);
        y = find(y, t);
        if(x == y) return;
        if(rank[x] < rank[y]){
            par[x] = y;
            time[x] = t;
        }else{
            par[y] = x;
            time[y] = t;
            if(rank[x] == rank[y]) rank[x]++;
        }
    }

    bool same(long long x, long long y, long long t){
        return find(x, t) == find(y, t);
    }
};

struct edge{long long u, v, cost;};
bool comp(const edge& e1, const edge& e2){
    return e1.cost < e2.cost;
}

UnionFind uf;

long long kruskal(long long N, vector<edge> es){
    sort(es.begin(), es.end(), comp);
    uf.initialize(N);
    long long res = 0;
    for(long long i=0; i<es.size(); i++){
        edge e = es[i];
        if(!uf.same(e.u, e.v, e.cost)){
            uf.unite(e.u, e.v, e.cost);
            res += e.cost;
        }
    }
    return res;
}


int main(){
    long long i, j, k;
    long long N, M;
    cin >> N >> M;
    vector<edge> es;
    for(i=0; i<M; i++){
        long long a, b, c;
        cin >> a >> b >> c;
        es.push_back({a, b, c});
    }
    long long sum = kruskal(N+1, es);

    long long Q;
    cin >> Q;
    for(i=0; i<Q; i++){
        long long s, t;
        cin >> s >> t;
        long long ok=0, ng=1e10; 
        while(ng-ok>1){
            long long mid = (ng+ok)/2;
            if(uf.same(s, t, mid)){
                ng = mid;
            }else{
                ok = mid;
            }
        }
        cout << (sum-ok-1) << endl;
    }
    return 0;
}

Submission Info

Submission Time
Task A - Graph
User betrue12
Language C++14 (GCC 5.4.1)
Score 700
Code Size 2226 Byte
Status AC
Exec Time 647 ms
Memory 20584 KB

Judge Result

Set Name Sample subtask1 subtask2 All
Score / Max Score 0 / 0 200 / 200 300 / 300 200 / 200
Status
AC × 2
AC × 12
AC × 21
AC × 31
Set Name Test Cases
Sample sample_1.txt, sample_2.txt
subtask1 sample_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt
subtask2 sample_1.txt, sample_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt, subtask_2_1.txt, subtask_2_2.txt, subtask_2_3.txt, subtask_2_4.txt, subtask_2_5.txt, subtask_2_6.txt, subtask_2_7.txt, subtask_2_8.txt
All sample_1.txt, sample_2.txt, sample_1.txt, sample_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt, subtask_2_1.txt, subtask_2_2.txt, subtask_2_3.txt, subtask_2_4.txt, subtask_2_5.txt, subtask_2_6.txt, subtask_2_7.txt, subtask_2_8.txt, subtask_3_1.txt, subtask_3_2.txt, subtask_3_3.txt, subtask_3_4.txt, subtask_3_5.txt, subtask_3_6.txt, subtask_3_7.txt, subtask_3_8.txt
Case Name Status Exec Time Memory
sample_1.txt AC 1 ms 256 KB
sample_2.txt AC 1 ms 256 KB
subtask_1_1.txt AC 2 ms 256 KB
subtask_1_10.txt AC 203 ms 10092 KB
subtask_1_11.txt AC 1 ms 256 KB
subtask_1_2.txt AC 43 ms 2292 KB
subtask_1_3.txt AC 402 ms 20456 KB
subtask_1_4.txt AC 5 ms 512 KB
subtask_1_5.txt AC 6 ms 576 KB
subtask_1_6.txt AC 101 ms 5232 KB
subtask_1_7.txt AC 404 ms 20328 KB
subtask_1_8.txt AC 5 ms 512 KB
subtask_1_9.txt AC 11 ms 892 KB
subtask_2_1.txt AC 412 ms 19944 KB
subtask_2_2.txt AC 411 ms 19176 KB
subtask_2_3.txt AC 412 ms 19688 KB
subtask_2_4.txt AC 408 ms 20456 KB
subtask_2_5.txt AC 13 ms 512 KB
subtask_2_6.txt AC 29 ms 1272 KB
subtask_2_7.txt AC 108 ms 5104 KB
subtask_2_8.txt AC 409 ms 19176 KB
subtask_3_1.txt AC 647 ms 19944 KB
subtask_3_2.txt AC 645 ms 19432 KB
subtask_3_3.txt AC 255 ms 1920 KB
subtask_3_4.txt AC 257 ms 1936 KB
subtask_3_5.txt AC 441 ms 10092 KB
subtask_3_6.txt AC 540 ms 14952 KB
subtask_3_7.txt AC 647 ms 19688 KB
subtask_3_8.txt AC 647 ms 20584 KB