Mai intai trebuie sa te autentifici.
Cod sursa(job #791849)
Utilizator | 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;
}