Submission #1419715


Source Code Expand

#include <bits/stdc++.h>
#define xx first
#define yy second
#define mp make_pair
#define pb push_back
#define mset(x, y) memset(x, y, sizeof x)
#define mcpy(x, y) memcpy(x, y, sizeof x)
using namespace std;

typedef long long LL;
typedef pair < int, int > pii;

inline int Read()
{
	int x = 0, f = 1, c = getchar();
	for (; !isdigit(c); c = getchar())
		if (c == '-')
			f = -1;
	for (;  isdigit(c); c = getchar())
		x = x * 10 + c - '0';
	return x * f;
}

const int MAXN = 2005;
const int mod = 1e9 + 7;

int n, S, T, dia, a, b, ans, g[MAXN], d[MAXN], f[MAXN][MAXN];
vector < int > adj[MAXN];

inline void Inc(int &x, int y) { x += y; if (x >= mod) x -= mod; }
inline void Dec(int &x, int y) { x -= y; if (x < 0) x += mod; }

inline void Dfs(int x, int c)
{
	d[x] = c ++;
	for (auto y : adj[x])
		if (y ^ g[x])
			g[y] = x, Dfs(y, c);
}

inline void Find()
{
	Dfs(1, 0);
	mset(g, 0);
	for (int i = 1; i <= n; i ++)
		if (d[i] > d[S])
			S = i;
	Dfs(S, 0);
	for (int i = 1; i <= n; i ++)
		if (d[i] > d[T])
			T = i;
	dia = d[a = T];
	for (int i = 1; i <= d[T] >> 1; i ++, a = g[a]);
	if (d[T] & 1)
		b = g[a];
}

inline void Dfs(int x, int g, int d, int l)
{
	for (auto y : adj[x])
		if (y ^ g)
			Dfs(y, x, d + 1, l);
	for (int i = d - l; i <= l - d; i ++)
	{
		f[x][i + 1002] = 1;
		for (auto y : adj[x])
			if (y ^ g)
				f[x][i + 1002] = 1LL * f[x][i + 1002] * (f[y][i + 1003] + f[y][i + 1001]) % mod;
	}
}

int main()
{
#ifdef wxh010910
	freopen("data.in", "r", stdin);
#endif
	n = Read();
	for (int i = 1, x, y; i < n; i ++)
		x = Read(), y = Read(), adj[x].pb(y), adj[y].pb(x);
	Find();
	if (dia & 1)
	{
		Dfs(a, b, 0, dia >> 1); Dfs(b, a, 0, dia + 1 >> 1);
		for (int i = -dia >> 1; i <= dia >> 1; i ++)
			Inc(ans, 1LL * f[a][i + 1002] * (f[b][i + 1003] + f[b][i + 1001]) % mod);
		mset(f, 0);
		Dfs(b, a, 0, dia >> 1); Dfs(a, b, 0, dia + 1 >> 1);
		for (int i = -dia >> 1; i <= dia >> 1; i ++)
			Inc(ans, 1LL * f[b][i + 1002] * (f[a][i + 1003] + f[a][i + 1001]) % mod);
		mset(f, 0);
		Dfs(a, b, 0, dia >> 1); Dfs(b, a, 0, dia >> 1);
		for (int i = -dia >> 1; i <= dia >> 1; i ++)
			Dec(ans, 2LL * f[a][i + 1002] * f[b][i + 1002] % mod);
		for (int i = -dia >> 1; i <= dia >> 1; i ++)
			Dec(ans, 1LL * f[a][i + 1002] * f[b][i + 1004] % mod);
		for (int i = -dia >> 1; i <= dia >> 1; i ++)
			Dec(ans, 1LL * f[b][i + 1002] * f[a][i + 1004] % mod);
		return printf("%d\n", ans), 0;
	}
	else
	{
		Dfs(a, 0, 0, dia >> 1);
		for (int i = -dia >> 1; i <= dia >> 1; i ++)
			Inc(ans, f[a][i + 1002]);
		return printf("%d\n", ans), 0;
	}
}

Submission Info

Submission Time
Task D - Oriented Tree
User wxh010910
Language C++14 (GCC 5.4.1)
Score 1800
Code Size 2653 Byte
Status AC
Exec Time 13 ms
Memory 16128 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1800 / 1800
Status
AC × 4
AC × 33
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 256 KB
0_01.txt AC 7 ms 16000 KB
0_02.txt AC 8 ms 16000 KB
0_03.txt AC 1 ms 384 KB
1_00.txt AC 7 ms 16000 KB
1_01.txt AC 5 ms 8064 KB
1_02.txt AC 13 ms 16128 KB
1_03.txt AC 3 ms 7552 KB
1_04.txt AC 7 ms 16000 KB
1_05.txt AC 3 ms 7552 KB
1_06.txt AC 7 ms 16000 KB
1_07.txt AC 3 ms 7552 KB
1_08.txt AC 8 ms 16000 KB
1_09.txt AC 8 ms 16000 KB
1_10.txt AC 3 ms 7552 KB
1_11.txt AC 8 ms 16000 KB
1_12.txt AC 4 ms 7680 KB
1_13.txt AC 11 ms 16000 KB
1_14.txt AC 5 ms 7808 KB
1_15.txt AC 5 ms 7936 KB
1_16.txt AC 5 ms 7936 KB
1_17.txt AC 3 ms 7552 KB
1_18.txt AC 3 ms 7552 KB
1_19.txt AC 3 ms 7552 KB
1_20.txt AC 8 ms 16000 KB
1_21.txt AC 3 ms 7552 KB
1_22.txt AC 3 ms 7552 KB
1_23.txt AC 3 ms 7552 KB
1_24.txt AC 3 ms 7552 KB
1_25.txt AC 3 ms 7552 KB
1_26.txt AC 3 ms 7552 KB
1_27.txt AC 3 ms 7552 KB
1_28.txt AC 3 ms 7552 KB