This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int maxn = 1e5 + 1;
const int LOG = 16;
int n,m,k, timer = 0, mark[maxn];
vector<pii> adj[maxn];
int tin[maxn], tout[maxn],up[LOG+1][maxn], node[maxn], bit[maxn], E[maxn];
void DFS(int u, int p) {
tin[u] = ++timer;
node[tin[u]] = u;
up[0][u] = p;
for (int i = 1; i <= LOG; i++) up[i][u] = up[i-1][up[i-1][u]];
for (pii i: adj[u]) {
int v = i.first, id = i.second;
if (v == p) continue;
E[v] = id;
DFS(v,u);
}
tout[u] = timer;
}
bool is_ancestor(int u, int v) {
return (tin[u] <= tin[v] && tout[u] >= tout[v]);
}
int LCA(int u, int v) {
if (is_ancestor(u,v)) return u;
if (is_ancestor(v,u)) return v;
for (int i = LOG; i >= 0; i--)
if (!is_ancestor(up[i][u],v)) u = up[i][u];
return up[0][u];
}
bool cmp(int A, int B) {
return tin[A] < tin[B];
}
void update(int idx, int val) {
for (; idx <= n; idx += (idx & -idx)) bit[idx] += val;
}
int getSum(int L, int R) {
L--;
int res = 0;
for (; L > 0; L -= (L & -L)) res -= bit[L];
for (; R > 0; R -= (R & -R)) res += bit[R];
return res;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> m >> k;
for (int i = 1; i < n; i++) {
int u,v;
cin >> u >> v;
adj[u].push_back(pii(v,i));
adj[v].push_back(pii(u,i));
}
DFS(1,1);
while (m--) {
int Q;
cin >> Q;
for (int i = 1; i <= Q; i++) cin >> mark[i];
sort(mark+1,mark+1+Q,cmp);
mark[Q+1] = mark[1];
for (int i = 1; i <= Q; i++) {
int L = LCA(mark[i],mark[i+1]);
update(tin[mark[i]],1);
update(tin[mark[i+1]],1);
update(tin[L],-2);
}
}
vector<int> res;
for (int i = 2; i <= n; i++)
if (getSum(tin[i],tout[i]) >= 2*k) res.push_back(E[i]);
sort(res.begin(),res.end());
cout << res.size() << '\n';
for (int i: res) cout << i << ' ';
return 0;
}
/*
6 1 2
1 3
2 3
3 4
6 4
4 5
4 1 3 2 5
*/
# | 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... |