// Author: 4uckd3v - Nguyen Cao Duc
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX_N = 1e5;
const int MOD = 1e9 + 7;
int n, q, k, timer, lg;
int edge[MAX_N + 5], tin[MAX_N + 5], tout[MAX_N + 5], dp[MAX_N + 5];
bool ok[MAX_N + 5];
int up[MAX_N + 5][18];
vector<int> adj[MAX_N + 5];
void dfs(int u, int par) {
tin[u] = ++timer;
up[u][0] = par;
for (int i = 1; i <= lg; i++) up[u][i] = up[up[u][i - 1]][i - 1];
for (int id : adj[u]) {
int v = edge[id] ^ u;
if (v == par) continue;
dfs(v, u);
};
tout[u] = ++timer;
};
bool isAncestor(int u, int v) {
return tin[u] <= tin[v] && tout[u] >= tout[v];
};
int __lca(int u, int v) {
if (isAncestor(u, v)) return u;
if (isAncestor(v, u)) return v;
for (int i = lg; i >= 0; i--)
if (!isAncestor(up[u][i], v))
u = up[u][i];
return up[u][0];
};
void calc(int u, int par) {
for (int id : adj[u]) {
int v = edge[id] ^ u;
if (v == par) continue;
calc(v, u);
dp[u] += dp[v];
if (dp[v] >= 2 * k) ok[id] = true;
};
};
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen("MAIN.INP", "r")) {
freopen("MAIN.INP", "r", stdin);
freopen("MAIN.OUT", "w", stdout);
};
cin >> n >> q >> k;
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(i);
adj[v].push_back(i);
edge[i] = u ^ v;
};
lg = ceil(log2(n));
dfs(1, 1);
while (q--) {
int sz;
cin >> sz;
vector<int> vertex(sz);
for (int &u : vertex) cin >> u;
sort(vertex.begin(), vertex.end(), [&](int u, int v) {
return tin[u] < tin[v];
});
if (sz == 1) continue;
vertex.push_back(__lca(vertex[0], vertex[sz - 1]));
for (int i = 0; i < sz; i++) {
int u = vertex[i], v = vertex[i + 1];
int lca = __lca(u, v);
dp[u]++, dp[v]++;
dp[lca] -= 2;
};
};
calc(1, 1);
cout << accumulate(ok + 1, ok + n, 0) << '\n';
for (int i = 1; i < n; i++)
if (ok[i]) cout << i << ' ';
};
Compilation message (stderr)
railway.cpp: In function 'int main()':
railway.cpp:60:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
60 | freopen("MAIN.INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
railway.cpp:61:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
61 | freopen("MAIN.OUT", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |