Submission #1779877


Source Code Expand

using System;
using System.Text;
using System.Collections.Generic;
class Solve{
    public Solve(){}
    ReadData re;
    StringBuilder sb;
    List<int>[] G;
    string S;
    int N;
    int[] child;
    int[] depth;
    int[] depth2;
    int[] depthR;
    int fav;
    public static int Main(){
        new Solve().Run();
        return 0;
    }
    void Run(){
        re = new ReadData();
        sb = new StringBuilder();
        Calc();
        Console.Write(sb.ToString());
    }
    void Calc(){
        N = re.i();
        {
            int[] fv = new int[2*N-2];
            int[] tv = new int[2*N-2];
            int cv = 0;
            int dv = N;
            for(int i=0;i<N-1;i++){
                int ai = re.i()-1;
                int bi = re.i()-1;
                fv[cv] = ai;
                tv[cv] = dv;
                cv++;
                fv[cv] = dv;
                tv[cv] = bi;
                cv++;
                dv++;
            }
            N = 2*N-1;
            G = re.g(N,fv,tv);
        }
        S = re.s();
        child = new int[N];
        depth = new int[N];
        depth2 = new int[N];
        depthR = new int[N];
        GetDepth(0,-1);
        GetDepthR(0,-1,0);
        GetChild(0,-1);
        fav = child[0];
        long count = dfs(0,-1);
        sb.Append(count+"\n");
    }
    long dfs(int v,int f){
        int min = child[v] == fav ? 1000000000 : depthR[v];
        int max = Math.Min(Math.Max(depth2[v],depthR[v]),depth[v]);
        long count = 0;
        for(int i=0;i<G[v].Count;i++){
            int t = G[v][i];
            if(t != f){
                count += dfs(t,v);
                if(child[t] > 0){
                    min = Math.Min(min,depth[t]+1);
                }
            }
        }
        if(v < (N+1)/2 && S[v] == '1'){
            min = 0;
        }
        if(max >= min){
            count += (max-min)/2+1;
        }
        return count;
    }
    void GetDepth(int v,int f){
        int max1 = 0;
        int max2 = 0;
        for(int i=0;i<G[v].Count;i++){
            int t = G[v][i];
            if(t != f){
                GetDepth(t,v);
                int val = depth[t]+1;
                if(val > max1){
                    max2 = max1;
                    max1 = val;
                }
                else if(val > max2){
                    max2 = val;
                }
            }
        }
        depth[v] = max1;
        depth2[v] = max2;
    }
    void GetDepthR(int v,int f,int d){
        for(int i=0;i<G[v].Count;i++){
            int t = G[v][i];
            if(t != f){
                int val = depth[v] == depth[t]+1 ? depth2[v]+1 : depth[v]+1;
                val = Math.Max(val,d+1); 
                GetDepthR(t,v,val);
            }
        }
        depthR[v] = d;
    }
    void GetChild(int v,int f){
        int c = 0;
        for(int i=0;i<G[v].Count;i++){
            int t = G[v][i];
            if(t != f){
                GetChild(t,v);
                c += child[t];
            }
        }
        if(v < (N+1)/2 && S[v] == '1'){
            c++;
        }
        child[v] = c;
    }
}
class ReadData{
    string[] str;
    int counter;
    public ReadData(){
        counter = 0;
    }
    public string s(){
        if(counter == 0){
            str = Console.ReadLine().Split(' ');
            counter = str.Length;
        }
        counter--;
        return str[str.Length-counter-1];
    }
    public int i(){
        return int.Parse(s());
    }
    public long l(){
        return long.Parse(s());
    }
    public double d(){
        return double.Parse(s());
    }
    public int[] ia(int N){
        int[] ans = new int[N];
        for(int j=0;j<N;j++){
            ans[j] = i();
        }
        return ans;
    }
    public int[] ia(){
        str = Console.ReadLine().Split(' ');
        counter = 0;
        int[] ans = new int[str.Length];
        for(int j=0;j<str.Length;j++){
            ans[j] = int.Parse(str[j]);
        }
        return ans;
    }
    public long[] la(int N){
        long[] ans = new long[N];
        for(int j=0;j<N;j++){
            ans[j] = l();
        }
        return ans;
    }
    public long[] la(){
        str = Console.ReadLine().Split(' ');
        counter = 0;
        long[] ans = new long[str.Length];
        for(int j=0;j<str.Length;j++){
            ans[j] = long.Parse(str[j]);
        }
        return ans;
    }
    public double[] da(int N){
        double[] ans = new double[N];
        for(int j=0;j<N;j++){
            ans[j] = d();
        }
        return ans;
    }
    public double[] da(){
        str = Console.ReadLine().Split(' ');
        counter = 0;
        double[] ans = new double[str.Length];
        for(int j=0;j<str.Length;j++){
            ans[j] = double.Parse(str[j]);
        }
        return ans;
    }
    public List<int>[] g(int N,int[] f,int[] t){
        List<int>[] ans = new List<int>[N];
        for(int j=0;j<N;j++){
            ans[j] = new List<int>();
        }
        for(int j=0;j<f.Length;j++){
            ans[f[j]].Add(t[j]);
            ans[t[j]].Add(f[j]);
        }
        return ans;
    }
    public List<int>[] g(int N,int M){
        List<int>[] ans = new List<int>[N];
        for(int j=0;j<N;j++){
            ans[j] = new List<int>();
        }
        for(int j=0;j<M;j++){
            int f = i()-1;
            int t = i()-1;
            ans[f].Add(t);
            ans[t].Add(f);
        }
        return ans;
    }
    public List<int>[] g(){
        int N = i();
        int M = i();
        List<int>[] ans = new List<int>[N];
        for(int j=0;j<N;j++){
            ans[j] = new List<int>();
        }
        for(int j=0;j<M;j++){
            int f = i()-1;
            int t = i()-1;
            ans[f].Add(t);
            ans[t].Add(f);
        }
        return ans;
    }
}
public static class Define{
    public const long mod = 1000000007;
}
public static class Debug{
    public static void Print(double[,,] k){
        for(int i=0;i<k.GetLength(0);i++){
            for(int j=0;j<k.GetLength(1);j++){
                for(int l=0;l<k.GetLength(2);l++){
                    Console.Write(k[i,j,l]+" ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
    public static void Print(double[,] k){
        for(int i=0;i<k.GetLength(0);i++){
            for(int j=0;j<k.GetLength(1);j++){
                Console.Write(k[i,j]+" ");
            }
            Console.WriteLine();
        }
    }
    public static void Print(double[] k){
        for(int i=0;i<k.Length;i++){
            Console.WriteLine(k[i]);
        }
    }
    public static void Print(long[,,] k){
        for(int i=0;i<k.GetLength(0);i++){
            for(int j=0;j<k.GetLength(1);j++){
                for(int l=0;l<k.GetLength(2);l++){
                    Console.Write(k[i,j,l]+" ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
    public static void Print(long[,] k){
        for(int i=0;i<k.GetLength(0);i++){
            for(int j=0;j<k.GetLength(1);j++){
                Console.Write(k[i,j]+" ");
            }
            Console.WriteLine();
        }
    }
    public static void Print(long[] k){
        for(int i=0;i<k.Length;i++){
            Console.WriteLine(k[i]);
        }
    }
    public static void Print(int[,,] k){
        for(int i=0;i<k.GetLength(0);i++){
            for(int j=0;j<k.GetLength(1);j++){
                for(int l=0;l<k.GetLength(2);l++){
                    Console.Write(k[i,j,l]+" ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
    public static void Print(int[,] k){
        for(int i=0;i<k.GetLength(0);i++){
            for(int j=0;j<k.GetLength(1);j++){
                Console.Write(k[i,j]+" ");
            }
            Console.WriteLine();
        }
    }
    public static void Print(int[] k){
        for(int i=0;i<k.Length;i++){
            Console.WriteLine(k[i]);
        }
    }
}

Submission Info

Submission Time
Task F - Black Radius
User leign
Language C# (Mono 4.6.2.0)
Score 1900
Code Size 8403 Byte
Status AC
Exec Time 1334 ms
Memory 89320 KB

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 1300 / 1300 600 / 600
Status
AC × 3
AC × 31
AC × 81
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 22 ms 9172 KB
0_01.txt AC 22 ms 9172 KB
0_02.txt AC 22 ms 9172 KB
1_00.txt AC 22 ms 11220 KB
1_01.txt AC 947 ms 88292 KB
1_02.txt AC 1334 ms 79716 KB
1_03.txt AC 840 ms 66532 KB
1_04.txt AC 731 ms 66952 KB
1_05.txt AC 598 ms 63176 KB
1_06.txt AC 758 ms 65380 KB
1_07.txt AC 777 ms 63336 KB
1_08.txt AC 837 ms 69220 KB
1_09.txt AC 814 ms 74604 KB
1_10.txt AC 852 ms 73992 KB
1_11.txt AC 908 ms 87448 KB
1_12.txt AC 799 ms 68908 KB
1_13.txt AC 801 ms 75476 KB
1_14.txt AC 807 ms 69204 KB
1_15.txt AC 760 ms 67376 KB
1_16.txt AC 835 ms 68936 KB
1_17.txt AC 807 ms 73812 KB
1_18.txt AC 772 ms 66264 KB
1_19.txt AC 747 ms 62424 KB
1_20.txt AC 770 ms 61968 KB
1_21.txt AC 824 ms 63964 KB
1_22.txt AC 706 ms 69028 KB
1_23.txt AC 769 ms 65068 KB
1_24.txt AC 806 ms 66408 KB
1_25.txt AC 707 ms 65392 KB
1_26.txt AC 711 ms 62632 KB
1_27.txt AC 743 ms 64916 KB
1_28.txt AC 674 ms 63536 KB
1_29.txt AC 733 ms 72256 KB
2_00.txt AC 23 ms 11220 KB
2_01.txt AC 945 ms 89320 KB
2_02.txt AC 953 ms 85600 KB
2_03.txt AC 946 ms 82404 KB
2_04.txt AC 829 ms 75876 KB
2_05.txt AC 874 ms 74208 KB
2_06.txt AC 875 ms 80100 KB
2_07.txt AC 874 ms 64484 KB
2_08.txt AC 849 ms 64484 KB
2_09.txt AC 817 ms 62432 KB
2_10.txt AC 717 ms 64976 KB
2_11.txt AC 666 ms 62928 KB
2_12.txt AC 699 ms 64976 KB
2_13.txt AC 619 ms 65220 KB
2_14.txt AC 601 ms 65136 KB
2_15.txt AC 578 ms 67312 KB
2_16.txt AC 812 ms 67300 KB
2_17.txt AC 746 ms 63332 KB
2_18.txt AC 767 ms 65248 KB
2_19.txt AC 827 ms 65376 KB
2_20.txt AC 822 ms 67424 KB
2_21.txt AC 848 ms 65380 KB
2_22.txt AC 793 ms 67040 KB
2_23.txt AC 787 ms 68196 KB
2_24.txt AC 786 ms 65764 KB
2_25.txt AC 857 ms 77280 KB
2_26.txt AC 856 ms 77028 KB
2_27.txt AC 830 ms 79332 KB
2_28.txt AC 818 ms 71752 KB
2_29.txt AC 946 ms 88368 KB
2_30.txt AC 881 ms 78920 KB
2_31.txt AC 840 ms 73788 KB
2_32.txt AC 815 ms 67936 KB
2_33.txt AC 777 ms 73904 KB
2_34.txt AC 793 ms 70792 KB
2_35.txt AC 860 ms 77800 KB
2_36.txt AC 789 ms 63964 KB
2_37.txt AC 814 ms 64352 KB
2_38.txt AC 747 ms 68692 KB
2_39.txt AC 811 ms 62640 KB
2_40.txt AC 721 ms 62340 KB
2_41.txt AC 797 ms 64768 KB
2_42.txt AC 729 ms 61948 KB
2_43.txt AC 841 ms 76060 KB
2_44.txt AC 699 ms 68788 KB
2_45.txt AC 627 ms 66912 KB
2_46.txt AC 641 ms 63324 KB
2_47.txt AC 748 ms 71176 KB