Submission #568296

#TimeUsernameProblemLanguageResultExecution timeMemory
568296_karan_gandhiRailway (BOI17_railway)C++17
100 / 100
450 ms38928 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) v.begin(), v.end() #define endl '\n' #define pl(var) " [" << #var << ": " << (var) << "] " #define ll long long vector<vector<pair<int, int>>> adj; multiset<int> token[100'010]; vector<int> s; int k; vector<int> ans; vector<int> votes; void merge(int u, int v) { if (token[u].size() < token[v].size()) { swap(token[u], token[v]); swap(votes[u], votes[v]); } for (int elt : token[v]) { token[u].insert(elt); int cnt = token[u].count(elt); if (cnt == s[elt]) { votes[u]--; } else if (cnt == 1) { votes[u]++; } } } void dfs(int u, int par, int idx) { for (auto [v, _idx] : adj[u]) { if (v == par) continue; dfs(v, u, _idx); } if (idx == -1) return; for (auto [v, _] : adj[u]) { if (v == par) continue; merge(u, v); } if (votes[u] >= k) { ans.push_back(idx); } } void solve() { int n, m; cin >> n >> m >> k; adj.resize(n); votes.resize(n); // number of votes for the ith edge s.resize(m); for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; a--, b--; adj[a].emplace_back(b, i); adj[b].emplace_back(a, i); } for (int i = 0; i < m; i++) { cin >> s[i]; assert(s[i] >= 1); for (int j = 0; j < s[i]; j++) { int a; cin >> a; token[a - 1].insert(i); votes[a - 1]++; } } dfs(0, 0, -1); cout << ans.size() << endl; sort(all(ans)); for (int i : ans) cout << i+1 << ' '; cout << endl; } int main() { // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); ios::sync_with_stdio(false); cin.tie(nullptr); int T = 1; // cin >> T; while (T--) solve(); }
#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...