Submission #1286565

#TimeUsernameProblemLanguageResultExecution timeMemory
1286565wedonttalkanymoreRailway (BOI17_railway)C++20
100 / 100
166 ms48588 KiB
#include <bits/stdc++.h>
/*
    Phia ben kia dai duong cung chi co
    Bo cat nang niu bien thoi
*/
using namespace std;
using ll = long long;

#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second

const ll N = 2e5 + 5, inf = 1e18, mod = 1e9 + 7, block = 320, lim = 19;

int n, m, k;
vector <pii> adj[N];
int sum[N];
vector <int> pre[N];
map <int, int> mp[N];
vector <int> res;

void dfs(int u, int par) {
	for (auto [v, id] : adj[u]) {
		if (v != par) {
			dfs(v, u);
		}
	}
	for (auto [v, id] : adj[u]) {
		if (v != par) {
			if (mp[v].size() >= k) res.push_back(id);
			if (mp[u].size() < mp[v].size()) mp[u].swap(mp[v]);
			for (auto [x, val] : mp[v]) {
				mp[u][x] += val;
				if (mp[u][x] == sum[x]) mp[u].erase(x);
			}
		}
	}
	for (auto x : pre[u]) {
		mp[u][x]++;
		if (mp[u][x] == sum[x]) mp[u].erase(x);
	}
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    if (fopen(".inp", "r")) {
        freopen(".inp", "r", stdin);
        freopen(".out", "w", stdout);
    }
    cin >> n >> m >> k;
    for (int i = 1; i < n; i++) {
    	int u, v;
    	cin >> u >> v;
    	adj[u].emplace_back(v, i);
    	adj[v].emplace_back(u, i);
	}
	for (int i = 1; i <= m; i++) {
		int x;
		cin >> x;
		sum[i] = x;
		for (int j = 1; j <= x; j++) {
			int tt;
			cin >> tt;
			pre[tt].push_back(i);
		}
	}
	dfs(1, 0);
	sort(res.begin(), res.end());
	cout << res.size() << '\n';
	for (auto x : res) cout << x << ' ';
    return 0;
}

Compilation message (stderr)

railway.cpp: In function 'int main()':
railway.cpp:49:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |         freopen(".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
railway.cpp:50:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |         freopen(".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...