Submission #1307980
Source Code Expand
using System; using System.Linq; using System.Collections.Generic; using Debug = System.Diagnostics.Debug; using SB = System.Text.StringBuilder; using Number = System.Int64; //using System.Numerics; using static System.Math; //using static MathEx; using P = System.Collections.Generic.KeyValuePair<int, int>; namespace Program { public class Solver { public void Solve() { var n = ri; var G = Enumerate(n, x => new List<int>()); for (int i = 0; i < n - 1; i++) { var f = ri - 1; var t = ri - 1; G[f].Add(t); G[t].Add(f); } var s = rs; long ans = f(n, G, s); Debug.WriteLine("go"); for (int i = 0; i < n; i++) { ans += Max(0, dp[i].secd - dp[i].minx + 1); Debug.WriteLine("{0} center: {1} ", i, Max(0, dp[i].secd - dp[i].minx + 1)); } IO.Printer.Out.WriteLine(ans); } DP[] dp; int f(int n, List<int>[] G, string s) { dp = new DP[n]; DP.New = () => { var ret = new DP(); ret.maxd = ret.secd = -100000; ret.minx = 1000000000; return ret; }; DP.Merge = (l, r, rst) => { var ret = new DP(); ret.maxd = l.maxd; ret.secd = l.secd; if (ret.maxd < r.maxd) { ret.secd = ret.maxd; ret.maxd = r.maxd; } else if (ret.secd < r.maxd) ret.secd = r.maxd; if (r.maxd >= 0) ret.minx = Min(l.minx, r.maxd); return ret; }; DP.Root = val => { var ret = new DP(); ret.maxd = Max(0, val.maxd + 1); ret.secd = Max(0, val.secd + 1); ret.minx = val.minx + 1; return ret; }; Func<int, int, DP> dfs = null; dfs = (prev, cur) => { var ret = DP.New(); foreach (var to in G[cur]) if (prev != to) ret += dfs(cur, to); dp[cur] = !ret; if (s[cur] == '1') dp[cur].minx = 0; return dp[cur]; }; dfs(-1, 0); var ans = 0; var rdp = Enumerate(n, x => new DP[G[x].Count + 1]); dfs = (prev, cur) => { var ret = DP.New(); var k = G[cur].Count; rdp[cur][k] = DP.New(); for (int i = k - 1; i >= 0; i--) rdp[cur][i] = rdp[cur][i + 1] + dp[G[cur][i]]; for (int i = 0; i < k; i++) { var to = G[cur][i]; var pre = dp[to]; dp[cur] = !(ret * rdp[cur][i + 1]); if (s[cur] == '1') dp[cur].minx = 0; ret += dp[to]; if (prev != to) { var min = Min(dp[cur].maxd, dp[to].maxd); var ok = false; if (dp[cur].maxd == min && dp[cur].minx < min + 1) ok = true; if (dp[to].maxd == min && dp[to].minx < min + 1) ok = true; if (ok) { ans++; } dfs(cur, to); } } dp[cur] = !ret; if (s[cur] == '1') dp[cur].minx = 0; return dp[cur]; }; dfs(-1, 0); return ans; } //* int ri => sc.Integer(); long rl => sc.Long(); double rd => sc.Double(); string rs => sc.Scan(); char rc => sc.Char(); [System.Diagnostics.Conditional("DEBUG")] void put(params object[] a) => Debug.WriteLine(string.Join(" ", a)); //*/ public IO.StreamScanner sc = new IO.StreamScanner(Console.OpenStandardInput()); static T[] Enumerate<T>(int n, Func<int, T> f) { var a = new T[n]; for (int i = 0; i < n; ++i) a[i] = f(i); return a; } static public void Swap<T>(ref T a, ref T b) { var tmp = a; a = b; b = tmp; } } } #region main static class Ex { static public string AsString(this IEnumerable<char> ie) { return new string(System.Linq.Enumerable.ToArray(ie)); } static public string AsJoinedString<T>(this IEnumerable<T> ie, string st = " ") { return string.Join(st, ie); } static public void Main() { var solver = new Program.Solver(); solver.Solve(); Program.IO.Printer.Out.Flush(); } } #endregion #region Ex namespace Program.IO { using System.IO; using System.Text; using System.Globalization; public class Printer: StreamWriter { static Printer() { Out = new Printer(Console.OpenStandardOutput()) { AutoFlush = false }; } public static Printer Out { get; set; } public override IFormatProvider FormatProvider { get { return CultureInfo.InvariantCulture; } } public Printer(System.IO.Stream stream) : base(stream, new UTF8Encoding(false, true)) { } public Printer(System.IO.Stream stream, Encoding encoding) : base(stream, encoding) { } public void Write<T>(string format, T[] source) { base.Write(format, source.OfType<object>().ToArray()); } public void WriteLine<T>(string format, T[] source) { base.WriteLine(format, source.OfType<object>().ToArray()); } } public class StreamScanner { public StreamScanner(Stream stream) { str = stream; } public readonly Stream str; private readonly byte[] buf = new byte[1024]; private int len, ptr; public bool isEof = false; public bool IsEndOfStream { get { return isEof; } } private byte read() { if (isEof) return 0; if (ptr >= len) { ptr = 0; if ((len = str.Read(buf, 0, 1024)) <= 0) { isEof = true; return 0; } } return buf[ptr++]; } public char Char() { byte b = 0; do b = read(); while ((b < 33 || 126 < b) && !isEof); return (char)b; } public string Scan() { var sb = new StringBuilder(); for (var b = Char(); b >= 33 && b <= 126; b = (char)read()) sb.Append(b); return sb.ToString(); } public string ScanLine() { var sb = new StringBuilder(); for (var b = Char(); b != '\n'; b = (char)read()) if (b == 0) break; else if (b != '\r') sb.Append(b); return sb.ToString(); } public long Long() { if (isEof) return long.MinValue; long ret = 0; byte b = 0; var ng = false; do b = read(); while (b != 0 && b != '-' && (b < '0' || '9' < b)); if (b == 0) return long.MinValue; if (b == '-') { ng = true; b = read(); } for (; true; b = read()) { if (b < '0' || '9' < b) return ng ? -ret : ret; else ret = ret * 10 + b - '0'; } } public int Integer() { return (isEof) ? int.MinValue : (int)Long(); } public double Double() { var s = Scan(); return s != "" ? double.Parse(s, CultureInfo.InvariantCulture) : double.NaN; } private T[] enumerate<T>(int n, Func<T> f) { var a = new T[n]; for (int i = 0; i < n; ++i) a[i] = f(); return a; } public char[] Char(int n) { return enumerate(n, Char); } public string[] Scan(int n) { return enumerate(n, Scan); } public double[] Double(int n) { return enumerate(n, Double); } public int[] Integer(int n) { return enumerate(n, Integer); } public long[] Long(int n) { return enumerate(n, Long); } } } #endregion public struct DP { public int maxd; public int secd; public int minx; //単位元を入れる public static Func<DP> New; /// <summary> /// 2つの森をマージする.trueのとき,右は木 /// </summary> public static Func<DP, DP, bool, DP> Merge; /// <summary> /// 根をつける /// </summary> public static Func<DP, DP> Root; public static DP operator +(DP l, DP r) { return Merge(l, r, true); } public static DP operator *(DP l, DP r) { return Merge(l, r, false); } public static DP operator !(DP x) { return Root(x); } }
Submission Info
Submission Time | |
---|---|
Task | F - Black Radius |
User | camypaper |
Language | C# (Mono 4.6.2.0) |
Score | 1300 |
Code Size | 8959 Byte |
Status | WA |
Exec Time | 479 ms |
Memory | 124776 KB |
Judge Result
Set Name | Sample | Subtask | All | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1300 / 1300 | 0 / 600 | ||||||||
Status |
|
|
|
Set Name | Test Cases |
---|---|
Sample | 0_00.txt, 0_01.txt, 0_02.txt |
Subtask | 0_01.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 |
All | 0_00.txt, 0_01.txt, 0_02.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, 2_00.txt, 2_01.txt, 2_02.txt, 2_03.txt, 2_04.txt, 2_05.txt, 2_06.txt, 2_07.txt, 2_08.txt, 2_09.txt, 2_10.txt, 2_11.txt, 2_12.txt, 2_13.txt, 2_14.txt, 2_15.txt, 2_16.txt, 2_17.txt, 2_18.txt, 2_19.txt, 2_20.txt, 2_21.txt, 2_22.txt, 2_23.txt, 2_24.txt, 2_25.txt, 2_26.txt, 2_27.txt, 2_28.txt, 2_29.txt, 2_30.txt, 2_31.txt, 2_32.txt, 2_33.txt, 2_34.txt, 2_35.txt, 2_36.txt, 2_37.txt, 2_38.txt, 2_39.txt, 2_40.txt, 2_41.txt, 2_42.txt, 2_43.txt, 2_44.txt, 2_45.txt, 2_46.txt, 2_47.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
0_00.txt | AC | 25 ms | 13396 KB |
0_01.txt | AC | 25 ms | 11476 KB |
0_02.txt | AC | 25 ms | 11348 KB |
1_00.txt | AC | 25 ms | 11348 KB |
1_01.txt | AC | 479 ms | 124776 KB |
1_02.txt | AC | 444 ms | 100584 KB |
1_03.txt | AC | 360 ms | 57448 KB |
1_04.txt | AC | 332 ms | 54096 KB |
1_05.txt | AC | 308 ms | 49612 KB |
1_06.txt | AC | 366 ms | 51048 KB |
1_07.txt | AC | 359 ms | 51048 KB |
1_08.txt | AC | 366 ms | 57064 KB |
1_09.txt | AC | 416 ms | 89192 KB |
1_10.txt | AC | 396 ms | 82400 KB |
1_11.txt | AC | 440 ms | 124116 KB |
1_12.txt | AC | 355 ms | 67668 KB |
1_13.txt | AC | 409 ms | 86648 KB |
1_14.txt | AC | 368 ms | 65464 KB |
1_15.txt | AC | 352 ms | 62856 KB |
1_16.txt | AC | 392 ms | 73112 KB |
1_17.txt | AC | 429 ms | 81904 KB |
1_18.txt | AC | 343 ms | 50996 KB |
1_19.txt | AC | 348 ms | 50868 KB |
1_20.txt | AC | 379 ms | 51540 KB |
1_21.txt | AC | 405 ms | 55916 KB |
1_22.txt | AC | 336 ms | 51728 KB |
1_23.txt | AC | 347 ms | 53784 KB |
1_24.txt | AC | 355 ms | 58152 KB |
1_25.txt | AC | 371 ms | 63632 KB |
1_26.txt | AC | 342 ms | 50980 KB |
1_27.txt | AC | 354 ms | 51844 KB |
1_28.txt | AC | 342 ms | 51976 KB |
1_29.txt | AC | 390 ms | 67976 KB |
2_00.txt | AC | 25 ms | 11348 KB |
2_01.txt | WA | 463 ms | 123752 KB |
2_02.txt | WA | 461 ms | 114408 KB |
2_03.txt | AC | 470 ms | 106728 KB |
2_04.txt | WA | 451 ms | 90728 KB |
2_05.txt | WA | 440 ms | 89832 KB |
2_06.txt | WA | 477 ms | 97256 KB |
2_07.txt | WA | 360 ms | 55400 KB |
2_08.txt | WA | 358 ms | 57448 KB |
2_09.txt | WA | 356 ms | 53224 KB |
2_10.txt | WA | 332 ms | 52176 KB |
2_11.txt | WA | 328 ms | 52176 KB |
2_12.txt | WA | 322 ms | 56144 KB |
2_13.txt | AC | 324 ms | 51788 KB |
2_14.txt | AC | 310 ms | 47564 KB |
2_15.txt | AC | 306 ms | 51660 KB |
2_16.txt | WA | 336 ms | 52968 KB |
2_17.txt | WA | 357 ms | 51048 KB |
2_18.txt | WA | 341 ms | 52968 KB |
2_19.txt | WA | 338 ms | 53224 KB |
2_20.txt | WA | 349 ms | 53224 KB |
2_21.txt | WA | 343 ms | 55144 KB |
2_22.txt | WA | 361 ms | 58344 KB |
2_23.txt | WA | 366 ms | 66024 KB |
2_24.txt | WA | 364 ms | 60776 KB |
2_25.txt | WA | 411 ms | 91752 KB |
2_26.txt | WA | 411 ms | 84456 KB |
2_27.txt | WA | 420 ms | 89576 KB |
2_28.txt | WA | 394 ms | 81304 KB |
2_29.txt | WA | 456 ms | 112900 KB |
2_30.txt | WA | 406 ms | 104216 KB |
2_31.txt | WA | 422 ms | 80128 KB |
2_32.txt | WA | 367 ms | 57324 KB |
2_33.txt | WA | 367 ms | 68364 KB |
2_34.txt | WA | 398 ms | 79712 KB |
2_35.txt | WA | 429 ms | 99320 KB |
2_36.txt | WA | 347 ms | 50868 KB |
2_37.txt | WA | 351 ms | 55072 KB |
2_38.txt | WA | 351 ms | 59832 KB |
2_39.txt | WA | 364 ms | 58376 KB |
2_40.txt | WA | 328 ms | 53764 KB |
2_41.txt | WA | 377 ms | 54196 KB |
2_42.txt | WA | 344 ms | 51660 KB |
2_43.txt | WA | 406 ms | 89840 KB |
2_44.txt | WA | 321 ms | 51508 KB |
2_45.txt | WA | 328 ms | 55280 KB |
2_46.txt | WA | 333 ms | 52600 KB |
2_47.txt | WA | 362 ms | 76316 KB |