Pagini recente » Cod sursa (job #1608656) | Cod sursa (job #1461440) | Cod sursa (job #1745864) | Cod sursa (job #1113046) | Cod sursa (job #791852)
Cod sursa(job #791852)
#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) == 4);
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;
}