提出 #1879617
ソースコード 拡げる
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
#define forn(i, a, n) for (int i = (int)(a); i < (int)(n); ++i)
#define ford(i, a, n) for (int i = (int)(n) - 1; i >= (int)(a); --i)
#define fore(i, a, n) for (int i = (int)(a); i <= (int)(n); ++i)
#define all(a) (a).begin(), (a).end()
#define fs first
#define sn second
#define trace(a)\
for (auto i : a) cerr << i << ' ';\
cerr << '\n'
#define eb emplace_back
#ifndef M_PI
const ld M_PI = acos(-1.0);
#endif
template<typename T>
inline void setmax(T& a, T b) {
if (a < b) a = b;
}
template<typename T>
inline void setmin(T& a, T b) {
if (a > b) a = b;
}
const ld eps = 1e-9;
const int INF = 2000000000;
const ll LINF = 1ll * INF * INF;
const ll MOD = 1000000007;
const int N = 5555;
vector<int> e[N];
int sz[N];
int n;
int find_sz(int u, int p) {
sz[u] = 1;
for (int v : e[u]) {
if (v == p) continue;
sz[u] += find_sz(v, u);
}
return sz[u];
}
pair<int, int> find_centroid(int u, int p) {
int best = -1;
for (int v : e[u]) {
if (v == p) continue;
if (best == -1 || sz[v] > sz[best])
best = v;
}
if (best == -1 || 2 * sz[best] <= n)
return {u, p};
return find_centroid(best, u);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
srand((unsigned)chrono::high_resolution_clock::now().time_since_epoch().count());
cin >> n;
forn(i, 1, n) {
int u, v;
cin >> u >> v;
--u, --v;
e[u].eb(v);
e[v].eb(u);
}
find_sz(0, -1);
pair<int, int> c = find_centroid(0, -1);
vector<int> sizes;
int sum = 0;
for (int u : e[c.fs]) {
if (u == c.sn) continue;
sizes.eb(sz[u]);
sum += sz[u];
}
if (c.sn != -1) sizes.eb(n - 1 - sum);
//trace(sizes);
vector<ll> fact(n + 1);
fact[0] = 1;
fore(i, 1, n) fact[i] = fact[i - 1] * i % MOD;
vector<vector<ll>> binom(n + 1, vector<ll>(n + 1));
fore(i, 0, n) fore(j, 0, n) {
if (j == 0) {
binom[i][j] = 1;
continue;
}
if (i == 0) {
binom[i][j] = 0;
continue;
}
binom[i][j] = binom[i - 1][j] + binom[i - 1][j - 1];
if (binom[i][j] >= MOD) binom[i][j] -= MOD;
}
vector<ll> part(n + 1);
part[0] = 1;
for (int x : sizes) {
vector<ll> npart(n + 1);
fore(i, 0, n)
fore(j, 0, x) {
if (i + j > n) break;
npart[i + j] += part[i] * binom[x][j] % MOD * binom[x][j] % MOD * fact[j];
npart[i + j] %= MOD;
}
part = npart;
}
ll ans = 0;
fore(i, 0, n) {
ans += (n % 2 == i % 2 ? 1 : -1) * fact[i] * part[n - i];
//cerr << i << ' ' << fact[i] << ' ' << part[n - i] << '\n';
ans %= MOD;
}
if (ans < 0) ans += MOD;
cout << ans << '\n';
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
800 / 800 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt, 1_36.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 0_00.txt |
AC |
1 ms |
384 KiB |
| 0_01.txt |
AC |
1 ms |
384 KiB |
| 0_02.txt |
AC |
1 ms |
384 KiB |
| 0_03.txt |
AC |
1 ms |
384 KiB |
| 1_00.txt |
AC |
486 ms |
196352 KiB |
| 1_01.txt |
AC |
486 ms |
196480 KiB |
| 1_02.txt |
AC |
327 ms |
131840 KiB |
| 1_03.txt |
AC |
500 ms |
196224 KiB |
| 1_04.txt |
AC |
485 ms |
196224 KiB |
| 1_05.txt |
AC |
503 ms |
196224 KiB |
| 1_06.txt |
AC |
538 ms |
194048 KiB |
| 1_07.txt |
AC |
536 ms |
194048 KiB |
| 1_08.txt |
AC |
684 ms |
196224 KiB |
| 1_09.txt |
AC |
839 ms |
196352 KiB |
| 1_10.txt |
AC |
660 ms |
196224 KiB |
| 1_11.txt |
AC |
659 ms |
196224 KiB |
| 1_12.txt |
AC |
535 ms |
192512 KiB |
| 1_13.txt |
AC |
477 ms |
192768 KiB |
| 1_14.txt |
AC |
482 ms |
188672 KiB |
| 1_15.txt |
AC |
495 ms |
192768 KiB |
| 1_16.txt |
AC |
510 ms |
195712 KiB |
| 1_17.txt |
AC |
520 ms |
195712 KiB |
| 1_18.txt |
AC |
519 ms |
191744 KiB |
| 1_19.txt |
AC |
524 ms |
191744 KiB |
| 1_20.txt |
AC |
524 ms |
189696 KiB |
| 1_21.txt |
AC |
541 ms |
196096 KiB |
| 1_22.txt |
AC |
541 ms |
193920 KiB |
| 1_23.txt |
AC |
549 ms |
193536 KiB |
| 1_24.txt |
AC |
564 ms |
192896 KiB |
| 1_25.txt |
AC |
601 ms |
195456 KiB |
| 1_26.txt |
AC |
593 ms |
187648 KiB |
| 1_27.txt |
AC |
636 ms |
194176 KiB |
| 1_28.txt |
AC |
687 ms |
194688 KiB |
| 1_29.txt |
AC |
1 ms |
384 KiB |
| 1_30.txt |
AC |
1 ms |
384 KiB |
| 1_31.txt |
AC |
505 ms |
196096 KiB |
| 1_32.txt |
AC |
499 ms |
196224 KiB |
| 1_33.txt |
AC |
501 ms |
196224 KiB |
| 1_34.txt |
AC |
476 ms |
186112 KiB |
| 1_35.txt |
AC |
485 ms |
192128 KiB |
| 1_36.txt |
AC |
466 ms |
180864 KiB |