Submission #602758

#TimeUsernameProblemLanguageResultExecution timeMemory
602758vanicSpring cleaning (CEOI20_cleaning)C++14
34 / 100
1100 ms17000 KiB
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

const int maxn=2e5+5;

vector < int > ms[maxn];
int novi[maxn];

int sol;
int root;

int dfs(int x, int prosl){
	int br=0;
	for(int i=0; i<(int)ms[x].size(); i++){
		if(ms[x][i]!=prosl){
			br+=dfs(ms[x][i], x);
		}
	}
	if(x==prosl){
		if(br&1){
			return 1;
		}
		return 0;
	}
	if(!br){
		br++;
	}
	if(br&1){
		sol++;
	}
	else{
		sol+=2;
	}
	return br;
}

void rijesi(){
	sol=0;
	if(dfs(root, root)){
		printf("-1\n");
		return;
	}
	printf("%d\n", sol);
}

void scan(int &a){
	a=0;
	char c=getchar_unlocked();
	while(c>='0' && c<='9'){
		a*=10;
		a+=c-'0';
		c=getchar_unlocked();
	}
}

int main(){
	int n, q;
	scan(n);
	scan(q);
	int a, b;
	for(int i=0; i<n-1; i++){
		scan(a);
		scan(b);
		a--;
		b--;
		ms[a].push_back(b);
		ms[b].push_back(a);
	}
	for(int i=0; i<n; i++){
		if(ms[i].size()>1){
			root=i;
			break;
		}
	}
	int m;
	for(int i=0; i<q; i++){
		scan(m);
		for(int j=0; j<m; j++){
			scan(a);
			a--;
			ms[a].push_back(j+n);
			ms[j+n].push_back(a);
			novi[j*2]=a;
			novi[j*2+1]=j+n;
		}
		rijesi();
		for(int j=0; j<m*2; j++){
			ms[novi[j]].pop_back();
		}
	}
	return 0;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...