Submission #1366377

#TimeUsernameProblemLanguageResultExecution timeMemory
1366377ivazivaThe Xana coup (BOI21_xanadu)C++20
5 / 100
83 ms420 KiB
#include <bits/stdc++.h>

using namespace std;

#define MAXN 21
#define int long long

int n;
vector<int> adj[MAXN];
int state[MAXN];
int deg[MAXN];

int32_t main()
{
	cin>>n;for (int i=1;i<n;i++) {int u,v;cin>>u>>v;adj[u].push_back(v);adj[v].push_back(u);}
	for (int node=1;node<=n;node++) cin>>state[node];
	int answer=n+1;
	for (int maska=0;maska<(1<<n);maska++)
	{
		for (int node=1;node<=n;node++)
		{
			if (!(maska&(1<<(node-1)))) continue;
			deg[node]++;for (int sled:adj[node]) deg[sled]++;
		}
		bool valid=true;
		for (int node=1;node<=n;node++)
		{
			if (deg[node]%2!=state[node]) {valid=false;break;}
		}
		if (valid) answer=min(answer,(long long)__builtin_popcount(maska));
		for (int node=1;node<=n;node++) deg[node]=0;
	}
	if (answer==n+1) cout<<"impossible"<<endl;
	else cout<<answer<<endl;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...