提出 #3882393
ソースコード 拡げる
#include <stdio.h>
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cmath>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits.h>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:336777216")
using namespace std;
#define mp make_pair
#define Fi first
#define Se second
#define pb(x) push_back(x)
#define szz(x) ((int)(x).size())
#define rep(i, n) for(int i=0;i<n;i++)
#define all(x) (x).begin(), (x).end()
#define ldb ldouble
typedef unsigned int uint;
typedef tuple<int, int, int> t3;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <ll, int> pli;
typedef pair <db, db> pdd;
int IT_MAX = 1 << 19;
const ll MOD = 1000000007;
const int INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const db PI = acos(-1);
const db ERR = 1e-10;
const int MX = 5005;
const int MM = 1000000007;
ll dp[MX][MX];
ll F[MX*2], I[MX*2], FI[MX*2], C[MX];
int cnt[MX];
vector<int> T[MX];
int N;
int dfs(int x, int p){
int tdp[MX] = {};
cnt[x] = 1;
dp[x][1] = 1;
for(int c : T[x]){
if(c == p) continue;
dfs(c, x);
for(int i = 0; i <= cnt[x] + cnt[c]; i++) tdp[i] = 0;
for(int i = 0; i <= cnt[x]; i++){
for(int j = 0; j <= cnt[c]; j++){
tdp[i+j] = (tdp[i+j] + dp[x][i] * dp[c][j]) % MM;
if(j%2 == 0){
tdp[i] = (tdp[i] + MM - dp[x][i] * dp[c][j] % MM * C[j/2] % MM) % MM;
}
}
}
for(int i = 0; i <= cnt[x] + cnt[c]; i++) dp[x][i] = tdp[i];
cnt[x] += cnt[c];
}
}
int main()
{
scanf("%d", &N);
F[0] = I[1] = FI[1] = 1;
for(int i = 1; i <= 2*N; i++) F[i] = F[i-1] * i % MM;
for(int i = 2; i <= 2*N; i++){
I[i] = (MM - MM/i) * I[MM%i] % MM;
FI[i] = FI[i-1] * I[i] % MM;
}
ll m = 1;
for(int i = 1; i <= N; i++){
m = I[2] * m % MM;
C[i] = F[i*2] * FI[i] % MM * m % MM;
}
for(int i = 1; i < N; i++){
int a, b;
scanf("%d%d", &a, &b);
T[a].push_back(b);
T[b].push_back(a);
}
dfs(1, -1);
ll ans = 0;
for(int i = 2; i <= N; i++) ans = (ans + dp[1][i] * C[i/2]) % MM;
printf("%lld\n", ans);
}
提出情報
| 提出日時 |
|
| 問題 |
E - Ribbons on Tree |
| ユーザ |
zigui |
| 言語 |
C++14 (GCC 5.4.1) |
| 得点 |
900 |
| コード長 |
2508 Byte |
| 結果 |
AC |
| 実行時間 |
212 ms |
| メモリ |
275072 KiB |
コンパイルエラー
./Main.cpp: In function ‘int main()’:
./Main.cpp:86:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &N);
^
./Main.cpp:100:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &a, &b);
^
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
900 / 900 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 0_00.txt |
AC |
1 ms |
512 KiB |
| 0_01.txt |
AC |
1 ms |
384 KiB |
| 0_02.txt |
AC |
1 ms |
512 KiB |
| 0_03.txt |
AC |
1 ms |
512 KiB |
| 1_00.txt |
AC |
1 ms |
384 KiB |
| 1_01.txt |
AC |
212 ms |
275072 KiB |
| 1_02.txt |
AC |
116 ms |
194176 KiB |
| 1_03.txt |
AC |
116 ms |
193920 KiB |
| 1_04.txt |
AC |
115 ms |
193920 KiB |
| 1_05.txt |
AC |
118 ms |
193792 KiB |
| 1_06.txt |
AC |
203 ms |
193792 KiB |
| 1_07.txt |
AC |
178 ms |
233088 KiB |
| 1_08.txt |
AC |
165 ms |
221824 KiB |
| 1_09.txt |
AC |
151 ms |
215680 KiB |
| 1_10.txt |
AC |
141 ms |
208768 KiB |
| 1_11.txt |
AC |
191 ms |
193664 KiB |
| 1_12.txt |
AC |
176 ms |
189568 KiB |
| 1_13.txt |
AC |
166 ms |
193792 KiB |
| 1_14.txt |
AC |
148 ms |
193664 KiB |
| 1_15.txt |
AC |
126 ms |
193664 KiB |
| 1_16.txt |
AC |
117 ms |
193792 KiB |
| 1_17.txt |
AC |
117 ms |
193920 KiB |
| 1_18.txt |
AC |
115 ms |
193792 KiB |
| 1_19.txt |
AC |
114 ms |
193920 KiB |
| 1_20.txt |
AC |
115 ms |
194048 KiB |
| 1_21.txt |
AC |
117 ms |
194304 KiB |
| 1_22.txt |
AC |
117 ms |
194432 KiB |
| 1_23.txt |
AC |
118 ms |
194944 KiB |
| 1_24.txt |
AC |
119 ms |
195328 KiB |
| 1_25.txt |
AC |
125 ms |
200960 KiB |
| 1_26.txt |
AC |
167 ms |
219776 KiB |
| 1_27.txt |
AC |
159 ms |
232320 KiB |
| 1_28.txt |
AC |
170 ms |
237568 KiB |
| 1_29.txt |
AC |
192 ms |
252928 KiB |