Submission #6393328
Source Code Expand
import sys input = sys.stdin.readline sys.setrecursionlimit(10 ** 6) import numpy as np MOD = 10 ** 9 + 7 N = int(input()) graph = [[] for _ in range(N+1)] for _ in range(N-1): x,y = map(int,input().split()) graph[x].append(y) graph[y].append(x) """ 包除の原理。各頂点を根として ・偶数個を選ぶ、そこが反例となっている、他は何でもよい、 ・奇数個を選ぶ、そこが反例となっている、他は何でもよい ・根を含む成分は保留してある。保留している頂点の数を持っておく。 ・偶数個の場合と奇数の場合の差分だけ持っておく """ def dp_merge(data1,data2): N1 = len(data1) - 1 N2 = len(data2) - 1 if N1 > N2: N1,N2 = N2,N1 data1,data2 = data2,data1 data = np.zeros(N1+N2, dtype = np.int64) for n in range(1,N1+1): data[n:n+N2] += data1[n] * data2[1:] % MOD data %= MOD return data fact_2 = [1,0,1] for n in range(3,N+10): fact_2.append(fact_2[n-2] * (n-1) % MOD) fact_2 = np.array(fact_2, dtype = np.int64) def dp_add_edge(data): N = len(data) - 1 data1 = np.zeros(N+2, dtype=np.int64) # 辺を反例に加えない data1[1:] = data # 辺を反例に加える data1[1] = - (data * fact_2[:N+1] % MOD).sum() % MOD return data1 def dfs(v, parent = None): data = None for y in graph[v]: if y == parent: continue data1 = dfs(y, v) # mergeする前に、最後の辺をひとつ加える data1 = dp_add_edge(data1) if data is None: data = data1 else: data = dp_merge(data, data1) if data is None: return np.array([0,1],dtype=np.int64) return data data = dfs(1) answer = (data * fact_2[:N+1] % MOD).sum() % MOD print(answer)
Submission Info
Submission Time | |
---|---|
Task | E - Ribbons on Tree |
User | maspy |
Language | Python (3.4.3) |
Score | 900 |
Code Size | 1905 Byte |
Status | AC |
Exec Time | 993 ms |
Memory | 17172 KiB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 900 / 900 | ||||
Status |
|
|
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, 1_29.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
0_00.txt | AC | 148 ms | 12512 KiB |
0_01.txt | AC | 147 ms | 12468 KiB |
0_02.txt | AC | 149 ms | 12512 KiB |
0_03.txt | AC | 149 ms | 12512 KiB |
1_00.txt | AC | 149 ms | 12468 KiB |
1_01.txt | AC | 483 ms | 17172 KiB |
1_02.txt | AC | 745 ms | 13204 KiB |
1_03.txt | AC | 742 ms | 13204 KiB |
1_04.txt | AC | 742 ms | 13204 KiB |
1_05.txt | AC | 688 ms | 13208 KiB |
1_06.txt | AC | 993 ms | 13112 KiB |
1_07.txt | AC | 676 ms | 15056 KiB |
1_08.txt | AC | 636 ms | 14484 KiB |
1_09.txt | AC | 607 ms | 14220 KiB |
1_10.txt | AC | 578 ms | 13776 KiB |
1_11.txt | AC | 936 ms | 13080 KiB |
1_12.txt | AC | 889 ms | 13136 KiB |
1_13.txt | AC | 866 ms | 13136 KiB |
1_14.txt | AC | 795 ms | 15252 KiB |
1_15.txt | AC | 702 ms | 13204 KiB |
1_16.txt | AC | 694 ms | 13208 KiB |
1_17.txt | AC | 696 ms | 13208 KiB |
1_18.txt | AC | 699 ms | 13128 KiB |
1_19.txt | AC | 685 ms | 13128 KiB |
1_20.txt | AC | 658 ms | 13132 KiB |
1_21.txt | AC | 672 ms | 13120 KiB |
1_22.txt | AC | 657 ms | 13208 KiB |
1_23.txt | AC | 653 ms | 15000 KiB |
1_24.txt | AC | 649 ms | 13124 KiB |
1_25.txt | AC | 618 ms | 13376 KiB |
1_26.txt | AC | 600 ms | 14544 KiB |
1_27.txt | AC | 584 ms | 15044 KiB |
1_28.txt | AC | 566 ms | 15256 KiB |
1_29.txt | AC | 534 ms | 16068 KiB |