제출 #1096521

#제출 시각아이디문제언어결과실행 시간메모리
1096521tanduc111Railway (BOI17_railway)C++14
23 / 100
1056 ms18260 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ii pair<int,int> #define fi first #define se second int d[100005], cnt[100005], mark[100005], msk, par[100005], a[100005]; vector <int> g[100005]; ii eg[100005]; void dfs(int u, int p = 0) { for (int id : g[u]) { int v = eg[id].fi + eg[id].se - u; if (v == p) continue; d[v] = d[u] + 1; par[v] = id; dfs(v, u); } } void proc(int u, int v) { while (u != v) { if (d[u] != d[v]) { if (d[u] > d[v]) { if (mark[par[u]] != msk) { cnt[par[u]]++; mark[par[u]] = msk; } u = eg[par[u]].fi + eg[par[u]].se - u; } else { if (mark[par[v]] != msk) { cnt[par[v]]++; mark[par[v]] = msk; } v = eg[par[v]].fi + eg[par[v]].se - v; } } else { if (mark[par[u]] != msk) { cnt[par[u]]++; mark[par[u]] = msk; } u = eg[par[u]].fi + eg[par[u]].se - u; if (mark[par[v]] != msk) { cnt[par[v]]++; mark[par[v]] = msk; } v = eg[par[v]].fi + eg[par[v]].se - v; } } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m, k; cin >> n >> m >> k; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; eg[i] = {u, v}; g[u].push_back(i); g[v].push_back(i); } dfs(1); for (int l = 1; l <= m; l++) { msk = l; int x; cin >> x; for (int i = 1; i <= x; i++) cin >> a[i]; for (int i = 2; i <= x; i++) proc(a[1], a[i]); } vector <int> vec; for (int i = 1; i < n; i++) if (cnt[i] >= k) vec.push_back(i); cout << vec.size() << '\n'; for (int x : vec) cout << x << ' '; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...