Submission #1307943
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; dfs = (prev, cur) => { var ret = DP.New(); var k = G[cur].Count; var rdp = new DP[k + 1]; rdp[k] = DP.New(); for (int i = k - 1; i >= 0; i--) rdp[i] = rdp[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[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) { Debug.WriteLine("{0} {1}", cur, to); 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 | 0 |
Code Size | 8983 Byte |
Status | WA |
Exec Time | 2115 ms |
Memory | 95624 KB |
Judge Result
Set Name | Sample | Subtask | All | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 0 / 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 | 27 ms | 9556 KB |
0_01.txt | AC | 25 ms | 13268 KB |
0_02.txt | AC | 24 ms | 11220 KB |
1_00.txt | AC | 24 ms | 11220 KB |
1_01.txt | TLE | 2114 ms | 95624 KB |
1_02.txt | TLE | 2113 ms | 72156 KB |
1_03.txt | AC | 311 ms | 38092 KB |
1_04.txt | AC | 302 ms | 39376 KB |
1_05.txt | AC | 287 ms | 40660 KB |
1_06.txt | AC | 318 ms | 36340 KB |
1_07.txt | AC | 305 ms | 38516 KB |
1_08.txt | AC | 492 ms | 48000 KB |
1_09.txt | AC | 1692 ms | 82900 KB |
1_10.txt | TLE | 2112 ms | 62420 KB |
1_11.txt | TLE | 2115 ms | 90952 KB |
1_12.txt | AC | 656 ms | 55820 KB |
1_13.txt | TLE | 2112 ms | 68508 KB |
1_14.txt | AC | 1349 ms | 58412 KB |
1_15.txt | AC | 344 ms | 46456 KB |
1_16.txt | AC | 1189 ms | 57624 KB |
1_17.txt | TLE | 2112 ms | 65436 KB |
1_18.txt | AC | 318 ms | 37952 KB |
1_19.txt | AC | 345 ms | 40120 KB |
1_20.txt | AC | 338 ms | 40484 KB |
1_21.txt | AC | 353 ms | 42992 KB |
1_22.txt | AC | 346 ms | 37020 KB |
1_23.txt | AC | 314 ms | 37008 KB |
1_24.txt | AC | 501 ms | 46336 KB |
1_25.txt | AC | 322 ms | 49408 KB |
1_26.txt | AC | 308 ms | 42668 KB |
1_27.txt | AC | 325 ms | 37516 KB |
1_28.txt | AC | 347 ms | 46200 KB |
1_29.txt | TLE | 2075 ms | 54748 KB |
2_00.txt | AC | 25 ms | 11348 KB |
2_01.txt | TLE | 2114 ms | 91356 KB |
2_02.txt | TLE | 2113 ms | 80860 KB |
2_03.txt | TLE | 2113 ms | 78172 KB |
2_04.txt | TLE | 2112 ms | 65372 KB |
2_05.txt | TLE | 2112 ms | 65368 KB |
2_06.txt | TLE | 2112 ms | 68188 KB |
2_07.txt | WA | 345 ms | 40052 KB |
2_08.txt | WA | 344 ms | 40052 KB |
2_09.txt | WA | 325 ms | 35956 KB |
2_10.txt | WA | 304 ms | 37340 KB |
2_11.txt | WA | 288 ms | 37212 KB |
2_12.txt | WA | 313 ms | 39376 KB |
2_13.txt | AC | 292 ms | 42832 KB |
2_14.txt | AC | 283 ms | 38732 KB |
2_15.txt | AC | 298 ms | 38740 KB |
2_16.txt | WA | 324 ms | 36340 KB |
2_17.txt | WA | 314 ms | 40436 KB |
2_18.txt | WA | 309 ms | 38388 KB |
2_19.txt | WA | 339 ms | 36568 KB |
2_20.txt | WA | 393 ms | 36576 KB |
2_21.txt | WA | 370 ms | 38516 KB |
2_22.txt | WA | 548 ms | 42396 KB |
2_23.txt | WA | 582 ms | 52476 KB |
2_24.txt | WA | 561 ms | 51308 KB |
2_25.txt | TLE | 2112 ms | 66444 KB |
2_26.txt | WA | 1799 ms | 78420 KB |
2_27.txt | TLE | 2112 ms | 70284 KB |
2_28.txt | TLE | 2113 ms | 67724 KB |
2_29.txt | TLE | 2113 ms | 86776 KB |
2_30.txt | WA | 1782 ms | 95240 KB |
2_31.txt | TLE | 2112 ms | 65428 KB |
2_32.txt | WA | 301 ms | 40696 KB |
2_33.txt | WA | 519 ms | 53792 KB |
2_34.txt | TLE | 2111 ms | 64488 KB |
2_35.txt | TLE | 2113 ms | 69424 KB |
2_36.txt | WA | 330 ms | 35648 KB |
2_37.txt | WA | 323 ms | 36012 KB |
2_38.txt | WA | 556 ms | 51788 KB |
2_39.txt | WA | 350 ms | 39044 KB |
2_40.txt | WA | 309 ms | 39440 KB |
2_41.txt | WA | 297 ms | 40756 KB |
2_42.txt | WA | 287 ms | 39000 KB |
2_43.txt | TLE | 2113 ms | 65556 KB |
2_44.txt | WA | 293 ms | 37308 KB |
2_45.txt | WA | 297 ms | 38132 KB |
2_46.txt | WA | 306 ms | 41596 KB |
2_47.txt | TLE | 2111 ms | 59000 KB |