Submission #9614620


Source Code Expand

#include <iostream>
#include <vector>
#define rep(i, n) for(i = 0; i < n; i++)
#define int long long
using namespace std;

int n;
vector<int> et[50];
int m;
int u[20], v[20];
int p2[51];

vector<bool> isFill[50];
int depth[50];
int parent[50];
int parentId[50];

void dfs(int p, int v, int dep) {
	depth[v] = dep;
	parent[v] = p;
	
	for (int i = 0; i < et[v].size(); i++) {
		int nv = et[v][i];
		if (nv == p) continue;
		parentId[nv] = i;
		dfs(v, nv, dep + 1);
	}
}

void Reset() {
	int i, j;
	rep(i, n) { rep(j, isFill[i].size()) isFill[i][j] = false; }
}

void Fill(int u, int v) {
	if (depth[u] < depth[v]) swap(u, v);
	
	int du = depth[u];
	int dv = depth[v];
	
	//cout << "Fill(" << u << ", " << v << ")" << endl;
	//cout << "du = " << du << ", dv = " << dv << endl;
	
	while (du > dv) {
		isFill[parent[u]][parentId[u]] = true;
		//cout << "u, parent[u], parentId[u] = " << u << ", " << parent[u] << ", " << parentId[u] << endl;
		u = parent[u];
		du--;
	}
	
	while (u != v) {
		isFill[parent[u]][parentId[u]] = true;
		isFill[parent[v]][parentId[v]] = true;
		u = parent[u];
		v = parent[v];
	}
}

signed main() {
	int i, j, k;
	
	cin >> n;
	rep(i, n - 1) {
		int a, b;
		cin >> a >> b;
		a--; b--;
		et[a].push_back(b);
		et[b].push_back(a);
	}
	cin >> m;
	rep(i, m) {
		cin >> u[i] >> v[i];
		u[i]--;
		v[i]--;
	}
	
	dfs(-1, 0, 0);
	
	p2[0] = 1;
	rep(i, n) p2[i + 1] = p2[i] * 2;
	
	rep(i, n) isFill[i].resize(et[i].size());
	
	int ans = 0;
	rep(i, (1 << m)) {
		Reset();
		
		int bcnt = 0;
		rep(j, m) {
			if ((i >> j) & 1) {
				Fill(u[j], v[j]);
				bcnt++;
			}
		}
		
		int fillCnt = 0;
		rep(j, n) {
			rep(k, isFill[j].size()) {
				if (isFill[j][k]) fillCnt++;
			}
		}
		
		//cout << "i = " << i << ", fillCnt = " << fillCnt << endl;
		if (bcnt % 2 == 0) ans += p2[n - 1 - fillCnt];
		else ans -= p2[n - 1 - fillCnt];
	}
	
	cout << ans << endl;
	return 0;
}

Submission Info

Submission Time
Task F - Tree and Constraints
User startcpp
Language C++14 (GCC 5.4.1)
Score 600
Code Size 1987 Byte
Status AC
Exec Time 743 ms
Memory 256 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 4
AC × 27
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All dense_01.txt, dense_02.txt, dense_03.txt, dense_04.txt, dense_05.txt, large_ans.txt, line_01.txt, line_02.txt, line_03.txt, no_overlap.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, star_01.txt, star_02.txt, star_03.txt
Case Name Status Exec Time Memory
dense_01.txt AC 162 ms 256 KiB
dense_02.txt AC 5 ms 256 KiB
dense_03.txt AC 5 ms 256 KiB
dense_04.txt AC 159 ms 256 KiB
dense_05.txt AC 5 ms 256 KiB
large_ans.txt AC 1 ms 256 KiB
line_01.txt AC 633 ms 256 KiB
line_02.txt AC 743 ms 256 KiB
line_03.txt AC 699 ms 256 KiB
no_overlap.txt AC 453 ms 256 KiB
random_01.txt AC 246 ms 256 KiB
random_02.txt AC 483 ms 256 KiB
random_03.txt AC 216 ms 256 KiB
random_04.txt AC 495 ms 256 KiB
random_05.txt AC 235 ms 256 KiB
random_06.txt AC 490 ms 256 KiB
random_07.txt AC 219 ms 256 KiB
random_08.txt AC 222 ms 256 KiB
random_09.txt AC 476 ms 256 KiB
random_10.txt AC 446 ms 256 KiB
sample_01.txt AC 1 ms 256 KiB
sample_02.txt AC 1 ms 256 KiB
sample_03.txt AC 1 ms 256 KiB
sample_04.txt AC 1 ms 256 KiB
star_01.txt AC 454 ms 256 KiB
star_02.txt AC 453 ms 256 KiB
star_03.txt AC 460 ms 256 KiB