Submission #40882103


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks
{
    public class E
    {
        public static void Main()
        {
            using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);
            Solve();
            Console.Out.Flush();
        }

        public static void Solve()
        {
            var (N, M) = Scanner.Scan<int, int>();

            var G = new List<int>[N].Select(x => new List<int>()).ToArray();
            for (var i = 0; i < M; i++)
            {
                var (u, v) = Scanner.Scan<int, int>();
                u--; v--;
                G[u].Add(v);
                G[v].Add(u);
            }

            var K = Scanner.Scan<int>();
            if (K == 0)
            {
                Console.WriteLine("Yes");
                Console.WriteLine(new string('1', N));
                return;
            }

            var D = new int[N][];
            var queue = new Queue<int>();
            for (var i = 0; i < N; i++)
            {
                var dist = new int[N];
                Array.Fill(dist, -1);
                queue.Enqueue(i);
                dist[i] = 0;
                while (queue.Count > 0)
                {
                    var u = queue.Dequeue();
                    foreach (var v in G[u])
                    {
                        if (dist[v] != -1) continue;
                        dist[v] = dist[u] + 1;
                        queue.Enqueue(v);
                    }
                }

                D[i] = dist;
            }

            var minD = new int[N];
            const int Inf = (int)1e9;
            Array.Fill(minD, Inf);
            var PD = new (int P, int D)[K];
            for (var i = 0; i < K; i++)
            {
                var (p, d) = Scanner.Scan<int, int>();
                p--;
                PD[i] = (p, d);
            }

            var C = new int[N];
            Array.Fill(C, 1);
            foreach (var (p, d) in PD)
            {
                for (var j = 0; j < N; j++)
                {
                    if (D[p][j] < d) C[j] = 0;
                }
            }

            foreach (var (p, d) in PD)
            {
                var ok = false;
                for (var v = 0; v < N; v++)
                {
                    ok |= C[v] == 1 && D[p][v] == d;
                }

                if (!ok)
                {
                    Console.WriteLine("No");
                    return;
                }
            }

            if (!C.Contains(1))
            {
                Console.WriteLine("No");
                return;
            }

            Console.WriteLine("Yes");
            Console.WriteLine(string.Join("", C));
        }

        public static class Scanner
        {
            public static T Scan<T>() where T : IConvertible => Convert<T>(Scan()[0]);
            public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]));
            }
            public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]));
            }
            public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]));
            }
            public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]), Convert<T5>(buffer[4]));
            }
            public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]), Convert<T5>(buffer[4]), Convert<T6>(buffer[5]));
            }
            public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => Scan().Select(Convert<T>);
            private static string[] Scan()
            {
                var line = Console.ReadLine()?.Trim() ?? string.Empty;
                return string.IsNullOrEmpty(line) ? Array.Empty<string>() : line.Split(' ');
            }
            private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
        }
    }
}

Submission Info

Submission Time
Task E - Nearest Black Vertex
User AconCavy
Language C# (.NET Core 3.1.201)
Score 500
Code Size 5372 Byte
Status AC
Exec Time 280 ms
Memory 44952 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 47
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, example0.txt, example1.txt, example2.txt
Case Name Status Exec Time Memory
000.txt AC 75 ms 27948 KiB
001.txt AC 78 ms 28316 KiB
002.txt AC 81 ms 28308 KiB
003.txt AC 81 ms 28424 KiB
004.txt AC 237 ms 44872 KiB
005.txt AC 280 ms 44476 KiB
006.txt AC 278 ms 44828 KiB
007.txt AC 268 ms 44304 KiB
008.txt AC 276 ms 44952 KiB
009.txt AC 77 ms 28668 KiB
010.txt AC 126 ms 31284 KiB
011.txt AC 117 ms 30396 KiB
012.txt AC 139 ms 31832 KiB
013.txt AC 115 ms 30480 KiB
014.txt AC 105 ms 29800 KiB
015.txt AC 141 ms 32000 KiB
016.txt AC 88 ms 28632 KiB
017.txt AC 112 ms 29832 KiB
018.txt AC 117 ms 30812 KiB
019.txt AC 87 ms 29308 KiB
020.txt AC 104 ms 29328 KiB
021.txt AC 103 ms 28952 KiB
022.txt AC 121 ms 30880 KiB
023.txt AC 155 ms 32580 KiB
024.txt AC 89 ms 28728 KiB
025.txt AC 106 ms 29500 KiB
026.txt AC 110 ms 30272 KiB
027.txt AC 134 ms 31384 KiB
028.txt AC 144 ms 31936 KiB
029.txt AC 130 ms 31220 KiB
030.txt AC 104 ms 29496 KiB
031.txt AC 97 ms 29196 KiB
032.txt AC 102 ms 29564 KiB
033.txt AC 113 ms 30316 KiB
034.txt AC 99 ms 28892 KiB
035.txt AC 99 ms 29524 KiB
036.txt AC 96 ms 28696 KiB
037.txt AC 95 ms 29252 KiB
038.txt AC 93 ms 28952 KiB
039.txt AC 87 ms 28460 KiB
040.txt AC 86 ms 28560 KiB
041.txt AC 82 ms 28780 KiB
042.txt AC 125 ms 30416 KiB
043.txt AC 139 ms 32028 KiB
example0.txt AC 79 ms 28252 KiB
example1.txt AC 74 ms 28088 KiB
example2.txt AC 89 ms 27888 KiB