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;
const int MAXN = 112345, MAXK = 22;
int id[MAXN], inv[MAXN];
vector <int> grafo[MAXN];
map < pair < int, int >, int > mp;
int t;
int seg[4 * MAXN];
void dfs(int v, int p) {
id[v] = t; inv[t] = v;
t++;
for(int i = 0; i < grafo[v].size(); i++) {
int viz = grafo[v][i];
if(viz == p) continue;
dfs(viz, v);
}
}
void update(int cur, int ini, int fim, int a, int b) {
if(ini > b || fim < a) return;
if(ini >= a && fim <= b) {
seg[cur]++;
return;
}
int m = (ini + fim) / 2;
int e = 2 * cur, d = 2 * cur + 1;
update(e, ini, m, a, b); update(d, m + 1, fim, a, b);
}
int query(int cur, int ini, int fim, int id) {
if(ini > id || fim < id) return 0;
if(ini == fim) return seg[cur];
int m = (ini + fim) / 2;
int e = 2 * cur, d = 2 * cur + 1;
return query(e, ini, m, id) + query(d, m + 1, fim, id) + seg[cur];
}
int main() {
t = 1;
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
for(int i = 1; i < n; i++) {
int a, b;
scanf("%d %d", &a, &b);
grafo[a].push_back(b); grafo[b].push_back(a);
mp[make_pair(a, b)] = i; mp[make_pair(b, a)] = i;
}
for(int i = 1; i <= n; i++) {
if(grafo[i].size() == 1) {
dfs(i, i);
break;
}
}
for(int i = 0; i < m; i++) {
int a;
scanf("%d", &a);
int mn = MAXN, mx = 0;
for(int j = 0; j < a; j++) {
int b;
scanf("%d", &b);
mn = min(mn, id[b]);
mx = max(mx, id[b]);
}
update(1, 1, n, mn + 1, mx);
}
vector <int> v;
for(int i = 2; i <= n; i++) {
if(query(1, 1, n, i) >= k) v.push_back(mp[make_pair(inv[i - 1], inv[i])]);
}
printf("%d\n", v.size());
sort(v.begin(), v.end());
for(int i = 0; i < v.size() ; i++) printf("%d ", v[i]);
printf("\n");
return 0;
}
Compilation message (stderr)
railway.cpp: In function 'void dfs(int, int)':
railway.cpp:12:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < grafo[v].size(); i++) {
~~^~~~~~~~~~~~~~~~~
railway.cpp: In function 'int main()':
railway.cpp:67:25: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
printf("%d\n", v.size());
~~~~~~~~^
railway.cpp:69:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < v.size() ; i++) printf("%d ", v[i]);
~~^~~~~~~~~~
railway.cpp:38:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d", &n, &m, &k);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
railway.cpp:41:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &a, &b);
~~~~~^~~~~~~~~~~~~~~~~
railway.cpp:53:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &a);
~~~~~^~~~~~~~~~
railway.cpp:57:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &b);
~~~~~^~~~~~~~~~
# | 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... |