Mai intai trebuie sa te autentifici.

Cod sursa(job #791849)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 25 septembrie 2012 16:49:04
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <vector>
#include <cassert>

using namespace std;

const int MaxN = 250005;
const int MaxC = 5005;

vector< pair<int, int> > E[MaxC];
int N, S, D, F[MaxN], MinC;

inline int Find(int X) {
    int RX = X;
    for (; F[RX]; RX = F[RX]);
    for (int Y = X; X != RX; X = Y) {
        Y = F[X]; F[X] = RX;
    }
    return RX;
}

inline void Merge(int X, int Y) {
    X = Find(X), Y = Find(Y);
    if (X != Y)
        F[Y] = X;
}

void Solve() {
    for (; Find(S) != Find(D); ++MinC)
        for (unsigned i = 0; i < E[MinC].size(); ++i)
            Merge(E[MinC][i].first, E[MinC][i].second);
    --MinC;
}

void Read() {
    assert(freopen("pscnv.in", "r", stdin));
    int M; assert(scanf("%d %d %d %d", &N, &M, &S, &D) == 2);
    for (; M; --M) {
        int X, Y, C; assert(scanf("%d %d %d", &X, &Y, &C) == 3);
        E[C].push_back(make_pair(X, Y));
    }
}

void Print() {
    assert(freopen("pscnv.out", "w", stdout));
    printf("%d\n", MinC);
}

int main() {
    Read();
    Solve();
    Print();
    return 0;
}