Submission #957475

#TimeUsernameProblemLanguageResultExecution timeMemory
957475n3rm1nRailway (BOI17_railway)C++17
23 / 100
402 ms524288 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; const int MAXN = 1e5 + 1, MAXM = 5e4+10, MAXLOG = 21; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } int n, m, k; vector < pair < int, int > > g[MAXN]; void read_graph() { cin >> n >> m >> k; int from, to; for (int i = 1; i < n; ++ i) { cin >> from >> to; g[from].push_back({to, i}); g[to].push_back({from, i}); } } int p[MAXN], lvl[MAXN]; void dfs(int beg, int par, int depth) { p[beg] = par; lvl[beg] = depth; int nb; for (int i = 0; i < g[beg].size(); ++ i) { nb = g[beg][i].first; if(lvl[nb] == 0)dfs(nb, beg, depth+1); } } int jump[MAXN][MAXLOG]; void fill_jump() { for (int i = 1; i <= n; ++ i) jump[i][0] = p[i]; for (int j = 1; j < MAXLOG; ++ j) for (int i = 1; i <= n; ++ i) jump[i][j] = jump[jump[i][j-1]][j-1]; } int move_up(int v, int dist) { for (int i = 0; (1 << i) <= dist; ++ i) { if((1 << i) & dist) v = jump[v][i]; } return v; } int lca(int u, int v) { if(lvl[u] > lvl[v])swap(u, v); int diff = lvl[v] - lvl[u]; v = move_up(v, diff); if(u == v)return u; for (int i = MAXLOG - 1; i >= 0; -- i) { if(jump[u][i] != jump[v][i]) { u = jump[u][i]; v = jump[v][i]; } } return p[u]; } int s; vector < int > que; vector < int > endpoints[MAXN], startpoints[MAXN]; int used[MAXN]; int ans[MAXN]; bitset < MAXM > dfs2(int beg) { used[beg] = 1; int nb, id; bitset < MAXM > bs, vs; for (int i = 0; i < g[beg].size(); ++ i) { nb = g[beg][i].first; id = g[beg][i].second; if(!used[nb]) { vs = dfs2(nb); bs = (bs | vs); ans[id] += vs.count(); } } for (int i = 0; i < endpoints[beg].size(); ++ i) bs[endpoints[beg][i]] = 1; for (int i = 0; i < startpoints[beg].size(); ++ i) bs[startpoints[beg][i]] = 0; return bs; } void read_queries() { int xx; for (int i = 1; i <= m; ++ i) { cin >> s >> xx; int lcaa = xx; que.clear(); que.push_back(xx); for (int j = 2; j <= s; ++ j) { cin >> xx; que.push_back(xx); lcaa = lca(lcaa, xx); } startpoints[lcaa].push_back(i); for (int j = 0; j < que.size(); ++ j) { endpoints[que[j]].push_back(i); } } } int main() { speed(); read_graph(); dfs(1, 0, 1); fill_jump(); read_queries(); dfs2(1); vector < int > anss; for (int i = 1; i <= n; ++ i) { if(ans[i] >= k)anss.push_back(i); } cout << anss.size() << endl; for (int i = 0; i < anss.size(); ++ i) cout << anss[i] << " "; cout << endl; return 0; }

Compilation message (stderr)

railway.cpp: In function 'void dfs(int, int, int)':
railway.cpp:31:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for (int i = 0; i < g[beg].size(); ++ i)
      |                     ~~^~~~~~~~~~~~~~~
railway.cpp: In function 'std::bitset<50010> dfs2(int)':
railway.cpp:81:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for (int i = 0; i < g[beg].size(); ++ i)
      |                     ~~^~~~~~~~~~~~~~~
railway.cpp:93:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |     for (int i = 0; i < endpoints[beg].size(); ++ i)
      |                     ~~^~~~~~~~~~~~~~~~~~~~~~~
railway.cpp:95:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for (int i = 0; i < startpoints[beg].size(); ++ i)
      |                     ~~^~~~~~~~~~~~~~~~~~~~~~~~~
railway.cpp: In function 'void read_queries()':
railway.cpp:115:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |         for (int j = 0; j < que.size(); ++ j)
      |                         ~~^~~~~~~~~~~~
railway.cpp: In function 'int main()':
railway.cpp:140:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  140 |     for (int i = 0; i < anss.size(); ++ i)
      |                     ~~^~~~~~~~~~~~~
#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...