Task: | Tree matching |
Sender: | Pohjantahti |
Submission time: | 2018-09-22 14:49:03 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.01 s | details |
#2 | ACCEPTED | 0.29 s | details |
#3 | ACCEPTED | 0.30 s | details |
#4 | ACCEPTED | 0.29 s | details |
#5 | ACCEPTED | 0.31 s | details |
#6 | ACCEPTED | 0.30 s | details |
#7 | ACCEPTED | 0.30 s | details |
Code
#include <iostream> #include <vector> using namespace std; typedef long long ll; const int N = 1000000; const ll M = 1000000007; int n; int g[2][N+5]; ll dp[2][N+5]; void dfs(int s) { int cl = g[0][s]; int cr = g[1][s]; if (cl != 0) { dfs(cl); } if (cr != 0) { dfs(cr); } if (cl == 0 && cr == 0) { dp[0][s] = 1; } else if (cl == 0) { dp[0][s] = (dp[0][cr]+dp[1][cr])%M; dp[1][s] = dp[0][cr]; } else if (cr == 0) { dp[0][s] = (dp[0][cl]+dp[1][cl])%M; dp[1][s] = dp[0][cl]; } else { dp[0][s] = ((dp[0][cl]+dp[1][cl])*(dp[0][cr]+dp[1][cr]))%M; dp[1][s] = ((dp[0][cl] * (dp[0][cr]+dp[1][cr])) + ((dp[0][cl]+dp[1][cl]) * dp[0][cr]))%M; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; ++i) { cin >> g[0][i] >> g[1][i]; } dfs(1); cout << ((dp[0][1] + dp[1][1])%M) << "\n"; return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
7 5 6 0 0 4 0 2 0 ... |
correct output |
---|
19 |
user output |
---|
19 |
Test 2
Verdict: ACCEPTED
input |
---|
1000000 406968 281253 108264 0 0 0 0 0 ... |
correct output |
---|
159944844 |
user output |
---|
159944844 |
Test 3
Verdict: ACCEPTED
input |
---|
1000000 1000000 325587 791377 324030 873422 0 0 0 ... |
correct output |
---|
114625606 |
user output |
---|
114625606 |
Test 4
Verdict: ACCEPTED
input |
---|
1000000 495129 959931 0 703069 862854 0 0 423221 ... |
correct output |
---|
922109659 |
user output |
---|
922109659 |
Test 5
Verdict: ACCEPTED
input |
---|
1000000 667150 768657 0 528730 716704 103616 554625 0 ... |
correct output |
---|
331516797 |
user output |
---|
331516797 |
Test 6
Verdict: ACCEPTED
input |
---|
1000000 490726 891332 0 988621 0 469251 224815 393797 ... |
correct output |
---|
831971669 |
user output |
---|
831971669 |
Test 7
Verdict: ACCEPTED
input |
---|
1000000 554662 668 0 0 0 0 0 806138 ... |
correct output |
---|
593438800 |
user output |
---|
593438800 |