#include #include "testlib.h" using namespace std; const int MAXN = 5005; const int LIM = 3e5; int f[MAXN]; int n, m, s, t; inline int find(int x) { return f[x] != x ? f[x] = find(f[x]) : x; } inline void merge(int x, int y) { x = find(x); y = find(y); if (x ^ y) f[x] = y; } int main(int argc, char *argv[]) { registerValidation(); n = inf.readInt(1, 2500); inf.readSpace(); m = inf.readInt(1, min(n * (n - 1) / 2, 6200)); inf.readSpace(); s = inf.readInt(1, n); inf.readSpace(); t = inf.readInt(1, n); inf.readEoln(); for (int i = 1; i <= n; ++i) f[i] = i; for (int i = 1, u, v; i <= m; ++i) { u = inf.readInt(1, n); inf.readSpace(); v = inf.readInt(1, n); inf.readSpace(); inf.readInt(1, LIM); inf.readEoln(); ensuref(u != v, "Self loop found!"); merge(u, v); } inf.readEof(); ensuref(find(s) == find(t), "The graph is not connected!"); return 0; }