結果
問題 | No.912 赤黒木 |
ユーザー | ei1333333 |
提出日時 | 2019-10-18 12:59:14 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 877 ms / 3,000 ms |
コード長 | 2,066 bytes |
コンパイル時間 | 2,850 ms |
コンパイル使用メモリ | 114,088 KB |
実行使用メモリ | 97,144 KB |
最終ジャッジ日時 | 2024-06-25 14:19:49 |
合計ジャッジ時間 | 18,092 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 24 ms
24,320 KB |
testcase_01 | AC | 26 ms
24,108 KB |
testcase_02 | AC | 26 ms
24,112 KB |
testcase_03 | AC | 27 ms
23,844 KB |
testcase_04 | AC | 28 ms
24,100 KB |
testcase_05 | AC | 28 ms
24,224 KB |
testcase_06 | AC | 28 ms
24,112 KB |
testcase_07 | AC | 29 ms
22,196 KB |
testcase_08 | AC | 27 ms
24,112 KB |
testcase_09 | AC | 29 ms
24,184 KB |
testcase_10 | AC | 28 ms
23,988 KB |
testcase_11 | AC | 27 ms
24,192 KB |
testcase_12 | AC | 604 ms
50,488 KB |
testcase_13 | AC | 653 ms
52,856 KB |
testcase_14 | AC | 599 ms
49,220 KB |
testcase_15 | AC | 695 ms
50,760 KB |
testcase_16 | AC | 611 ms
52,164 KB |
testcase_17 | AC | 665 ms
50,404 KB |
testcase_18 | AC | 635 ms
51,644 KB |
testcase_19 | AC | 612 ms
51,012 KB |
testcase_20 | AC | 655 ms
48,960 KB |
testcase_21 | AC | 635 ms
48,732 KB |
testcase_22 | AC | 615 ms
51,964 KB |
testcase_23 | AC | 608 ms
49,760 KB |
testcase_24 | AC | 616 ms
54,064 KB |
testcase_25 | AC | 684 ms
50,368 KB |
testcase_26 | AC | 719 ms
52,932 KB |
testcase_27 | AC | 649 ms
47,944 KB |
testcase_28 | AC | 811 ms
97,132 KB |
testcase_29 | AC | 871 ms
92,528 KB |
testcase_30 | AC | 877 ms
97,144 KB |
testcase_31 | AC | 819 ms
94,768 KB |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System; using System.Collections.Generic; class Program { Scanner cin; int N; List<int>[] g; int[] sub; int[,] dp; void rec(int idx, int par) { int[] dp2 = { 0, 0, 0 }; foreach(var to in g[idx]) { if (to == par) continue; rec(to, idx); sub[idx] += sub[to]; int[] dp3 = { 10101010, 10101010, 10101010 }; for (int i = 0; i < 3; i++) { for(int j = 0; i + j < 3; j++) { dp3[i + j] = Math.Min(dp3[i + j], dp2[i] + dp[to, j] + (sub[to] + j) % 2); } } for (int i = 0; i < 3; i++) { dp2[i] = dp3[i]; } } for(int i = 0; i < 3; i++) { dp[idx, i] = dp2[i]; } } void myon() { cin = new Scanner(); N = cin.nextInt(); g = new List<int>[N]; for(int i = 0; i < N; i++) { g[i] = new List<int>(); } for(int i = 1; i < N; i++) { int a = cin.nextInt() - 1; int b = cin.nextInt() - 1; g[a].Add(b); g[b].Add(a); } sub = new int[N]; for(int i = 1; i < N; i++) { int a = cin.nextInt() - 1; int b = cin.nextInt() - 1; sub[a] = 1 - sub[a]; sub[b] = 1 - sub[b]; } dp = new int[N, 3]; rec(0, -1); Console.WriteLine(dp[0, 2] + (N - 1)); } static void Main(string[] args) { new Program().myon(); } } class Scanner { string[] s; int i; readonly char[] cs = new char[] { ' ' }; public Scanner() { s = new string[0]; i = 0; } public string next() { if (i < s.Length) return s[i++]; string st = Console.ReadLine(); while (st == "") st = Console.ReadLine(); s = st.Split(cs, StringSplitOptions.RemoveEmptyEntries); if (s.Length == 0) return next(); i = 0; return s[i++]; } public string nextLine() { return Console.ReadLine(); } public int nextInt() { return int.Parse(next()); } public long nextLong() { return long.Parse(next()); } public double nextDouble() { return double.Parse(next()); } }