/* NWERC 2008: Sample solution to "Proving Equivalences" * Author: Per Austrin * * Algorithm: strongly connected components */ #include #include #include using namespace std; typedef vector vi; int root[50000], in[50000], out[50000]; int C = 0, ins = 0, outs = 0; vi P, F[50000]; int dfs(int v) { root[v] = out[v] = in[v] = ++ins; P.push_back(v); for (vi::iterator it = F[v].begin(); it != F[v].end(); ++it) root[v] 1 ? max(C-ins, C-outs) : 0); } int main(void) { int N; for (scanf("%d", &N); N--; solve()); return 0; }