Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35535 | 林芳菲 | 【J】T2 | C++ | 运行超时 | 95 | 1002 MS | 66856 KB | 1083 | 2024-12-11 20:46:06 |
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; int n, m; int p[1000010]; int f[1000010]; vector<int> g[1000010]; void dfs1(int x) { if (p[x] != -1) f[x] = p[x]; for (int i = 0; i < g[x].size(); i++) { int y = g[x][i]; if (f[y] == 1e9 + 7) dfs1(y); f[x] = min(f[x], f[y]); } } void dfs2(int x, int fa) { if (f[x] != f[fa]) cout << f[x] << " "; if (g[x].size() == 2) if (f[g[x][0]] != f[x]) swap(g[x][0], g[x][1]); for (int i = 0; i < g[x].size(); i++) { int y = g[x][i]; dfs2(y, x); } } int main() { // freopen("maze.in", "r", stdin); // freopen("maze.out", "w", stdout); scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) scanf("%d", &p[i]); for (int i = 1; i <= n; i++) { int ch; cin >> ch; f[i] = 1e9 + 7; for (int j = 1; j <= ch; j++) { int y; cin >> y; g[i].push_back(y); } } dfs1(1); dfs2(1, 0); // fclose(stdin); // fclose(stdout); return 0; }