int main() { FILE *in = fopen (PROBLEM_NAME".in","r"); FILE *out = fopen (PROBLEM_NAME".out","w"); int k; fscanf(in, "%d %d ", &n, &k); for (int i = 0; i < n; ++i) { used.push_back(false); tin.push_back(0); fup.push_back(0); vi l; g.push_back(l); } for (int i = 0; i < k; ++i) { int x, y; fscanf(in, "%d %d ", &x, &y); g[x-1].push_back(y-1); g[y-1].push_back(x-1); } timer = 0; dfs(0); sort(ans.begin(), ans.end()); ans.erase( unique( ans.begin(), ans.end() ), ans.end() ); fprintf(out, "%d\n", (int)ans.size()); for (size_t i = 0; i < ans.size(); ++i) { fprintf(out, "%d\n", ans[i]+1); } fclose(in); fclose(out); return 0; }
int main() { FILE *in = fopen (PROBLEM_NAME".in","r"); FILE *out = fopen (PROBLEM_NAME".out","w"); fscanf(in, "%d", &n); for (int i = 0; i < n; ++i) { tin.push_back(0); tout.push_back(0); used.push_back(false); vi l; g.push_back(l); } for (int i = 0; i < n; ++i) { int p; fscanf(in, "%d", &p); if (p == 0) { root = i; } else { g[p-1].push_back(i); } } timer = 0; dfs(root); // print(); int k; fscanf(in, "%d", &k); for (int i = 0; i < k; ++i) { int a, b; fscanf(in, "%d %d", &a, &b); int res = (upper(a-1, b-1)) ? 1 : 0; fprintf(out, "%d\n", res); } fclose(in); fclose(out); return 0; }