#include #include "testlib.h" using namespace std; using pii = pair; int main(int argc, char* argv[]) { // registerLemonChecker(argc, argv); registerTestlibCmd(argc, argv); int n = inf.readInt(1, 200000, "n"); int m = inf.readInt(0, 200000, "m"); int p = ouf.readInt(-1, 200000, "p"); if (p == -1) { quitf(_wa, "Judge has answer, but participant has not."); } int s = ouf.readInt(0, 200000, "s"); if (s + s + p != n) { quitf(_wa, "City num not eq %d.", n); } static set st; while (m--) { int u = inf.readInt(1, n, "u"); int v = inf.readInt(1, n, "v"); if (u > v) { swap(u, v); } st.insert(pii{u,v}); } auto check = [&](int u, int v) { if (u > v) swap(u, v); return st.find(pii{u,v}) != st.end(); }; static int col[200010]; vector vt; for (int i = 0; i < p; ++i) { int u = ouf.readInt(1, n, "u"); col[u] = 1; vt.push_back(u); } for (int i = 0; i < s; ++i) { int u = ouf.readInt(1, n, "u"); col[u] = 2; } for (int i = 0; i < s; ++i) { int u = ouf.readInt(1, n, "u"); col[u] = 3; } for (int i = 1; i <= n; ++i) { if (col[i] == 0) { quitf(_wa, "Some city is not colored."); } } for (int i = 1; i < vt.size(); ++i) { if (not check(vt[i-1], vt[i])) { quitf(_wa, "%d %d Not a path.", vt[i-1], vt[i]); } } for (auto it = st.begin(); it != st.end(); ++it) { int u = it->first, v = it->second; if (col[u] + col[v] == 5) { quitf(_wa, "Two set is not departed."); } } quitf(_ok, "The answer is correct."); return 0; }