Submission #103443

# Submission time Handle Problem Language Result Execution time Memory
103443 2019-03-30T17:53:56 Z SecretAgent007 Sightseeing (NOI14_sightseeing) C++17
25 / 25
3117 ms 100376 KB
#include <bits/stdc++.h>
using namespace std;

#define double long double

const int INF = INT_MAX;

vector< vector< pair< int, int > > > Graph;

vector< int > U;

vector< int > dist;

int getParents(int a){
    if(U[a] == a) return a;
    else return U[a] = getParents(U[a]);
}

void Union(int a, int b){
    U[getParents(a)] = getParents(b);
}

void dfs(int node, int last){
    for(auto a : Graph[node]){
        if(a.first == last) continue;
        dist[a.first] = min(a.second, dist[node]);
        dfs(a.first, node);
    }
}

signed main(){

    int v, e, q;
    cin >> v >> e >> q;

    Graph.resize(v+1);
    U.resize(v+1);
    dist.resize(v+1, INF);

    vector< tuple<int, int, int> > ve(e);

    for(int i = 0; i <= v; i++) U[i] = i;

    for(int i = 0; i < e ; i++){
        int a, b, c;
        scanf("%d%d%d",&a,&b,&c);
        ve[i] = make_tuple(c,a,b);
    }

    sort(ve.begin(), ve.end(), greater<tuple<int, int, int> >());

    for(int i = 0; i < e; i++){
        auto tup = ve[i];

        int c = get<0>(tup);
        int a = get<1>(tup);
        int b = get<2>(tup);

        if(getParents(a) == getParents(b)) continue;
        else{
            Union(a,b);
            Graph[a].push_back(make_pair(b,c));
            Graph[b].push_back(make_pair(a,c));
        }
    }

    dfs(1,-1);

    while(q--){
        int a;
        scanf("%d", &a);
        cout << dist[a] << '\n';
    }
}
/*
4 4 2
1 2 10
1 3 30
2 4 20
3 4 5
3
4
*/

Compilation message

sightseeing.cpp: In function 'int main()':
sightseeing.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d",&a,&b,&c);
         ~~~~~^~~~~~~~~~~~~~~~~~~
sightseeing.cpp:71:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &a);
         ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 47 ms 3300 KB Output is correct
2 Correct 38 ms 3064 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2248 ms 61996 KB Output is correct
2 Correct 3117 ms 100376 KB Output is correct