Submission #1282960

#TimeUsernameProblemLanguageResultExecution timeMemory
1282960Jawad_Akbar_JJRailway (BOI17_railway)C++20
100 / 100
214 ms44476 KiB
#include <iostream>
#include <vector>
#include <set>

using namespace std;
const int N = 1<<17;
vector<pair<int,int>> nei[N];
vector<int> ers[N];
set<int> st[N];
int hei[N], par[N][20], Ans[N], Sz, n, m, k;

void dfs(int u, int p){
	hei[u] = hei[p] + 1;
	par[u][0] = p;

	for (int i=1;i<17;i++)
		par[u][i] = par[par[u][i-1]][i-1];

	for (auto [i, ind] : nei[u]){
		if (i == p)
			continue;
		dfs(i, u);
	}
}

void moveUp(int &v, int d){
	for (int i=0;i<17;i++)
		if ((1<<i) & d)
			v = par[v][i];
}

int LCA(int u, int v){
	if (hei[u] > hei[v])
		swap(u, v);

	moveUp(v, hei[v] - hei[u]);
	if (u == v)
		return u;

	for (int i=16;i>=0;i--){
		if (par[u][i] != par[v][i])
			u = par[u][i], v = par[v][i];
	}
	return par[u][0];
}

void dfs2(int u, int p, int id = 0){
	for (auto [i, ind] : nei[u]){
		if (i == p)
			continue;
		dfs2(i, u, ind);

		if (st[i].size() > st[u].size())
			swap(st[u], st[i]);
		for (int j : st[i])
			st[u].insert(j);
	}
	for (int i : ers[u])
		st[u].erase(i);

	if (st[u].size() >= k)
		Sz++, Ans[id] = 1;
}

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin>>n>>m>>k;

	for (int i=1, a, b;i<n;i++){
		cin>>a>>b;
		nei[a].push_back({b, i});
		nei[b].push_back({a, i});
	}

	dfs(1, 0);

	for (int i=1, s, lca;i<=m;i++){
		cin>>s>>lca;
		st[lca].insert(i);

		for (int k=1, v;k<s;k++)
			cin>>v, lca = LCA(lca, v), st[v].insert(i);
		ers[lca].push_back(i);
	}

	dfs2(1, 0);

	cout<<Sz<<'\n';
	for (int i=1;i<n;i++){
		if (Ans[i])
			cout<<i<<' ';
	}
	cout<<'\n';
}
#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...