提出 #69481066


ソースコード 拡げる

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
using System.IO.Pipes;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.Versioning;
using System.CodeDom;

namespace AtCoder.Abc
{
    public class AtCoderABC
    {
        public static void Main(string[] args)
        {
            var sw = new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);

            // 実行したいクラスのMainメソッドを呼び出す
        //    QuestionA.Run();
          //   QuestionB.Run();
             QuestionC.Run();
        //    QuestionD.Run();
            // QuestionE.Run();
            // QuestionF.Run();
            // QuestionG.Run();
            // QuestionH.Run();
            // QuestionI.Run();

            Console.Out.Flush();
        }
    }

    public class QuestionA
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();

            var A = LA[0];
            var B = LA[1];
            var C = LA[2];

            var HS = new HashSet<long>();
            HS.Add(A);
            HS.Add(B);
            HS.Add(C);

            if (HS.Count != 3)
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }



        }
    }

    public class QuestionB
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();

            var N = LA[0];
            var M = LA[1];
            var K = LA[2];
            var LST = new List<long>[N];
            for (int i = 0; i < N; ++i)
            {
                LST[i] = new List<long>();
            }

            var ANS = new List<long>();

            for (int i = 0; i < K; ++i)
            {
                LA = Utilities.GetLongArray();

                var A = LA[0];
                var B = LA[1];

                LST[A - 1].Add(B);


                if (LST[A-1].Count == M)
                {
                    ANS.Add(A - 1);
                }




            }

            int cnt = 0;
            foreach (var i in ANS)
            {
                if (cnt != 0) Console.Write(" ");
                Console.Write(i+1);
                cnt++;

            }
            Console.WriteLine("");





        }
    }

    public class QuestionC
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();
            var N = LA[0];

            var GET = new bool[N];
            for (int i =0; i < N; ++i)
            {
                GET[i] = false;
            }

            var MAP = new Dictionary<long, List<long>>();
            for (int i = 0; i < N; ++i)
            {
                var LST = new List<long>();

                MAP.Add(i, LST);
            }

            Queue<long> q = new Queue<long>();
            var ANS = new HashSet<long>();
            
            for (int i = 0; i < N; ++i)
            {
                LA = Utilities.GetLongArray();

                var A = LA[0];
                var B = LA[1];

                if (A == 0 && B == 0)
                {
                    GET[i] = true;
                    q.Enqueue(i);
                    ANS.Add(i);
                }
                else
                {
                    MAP[A-1].Add(i);
                    MAP[B-1].Add(i);
                }
            }

            while (q.Count() != 0)
            {

                long v = q.Dequeue();

                long num = MAP[v].Count();

                for (int i = 0; i < num; ++i)
                {
                    long next_v = MAP[v][i];

                    if (GET[next_v] == false)
                    {
                        GET[next_v] = true;
                        q.Enqueue(next_v);
                        ANS.Add(next_v);
                    }
                    else
                    {
                        continue;
                    }
                }
            }

            Console.WriteLine(ANS.Count);


        }
    }

    public class QuestionD
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();
        


        }

       
    }

    public class QuestionE
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();




        }
    }

    public class QuestionF  

    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();

        }
    }

    public class QuestionG
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();

        }
    }

    public class QuestionH
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();

        }

    }

    public class QuestionI
    {
        public static void Run()
        {
            var LA = Utilities.GetLongArray();

        }
    }


    internal class Utilities
    {
        public static string GetString()
        {
            return Console.ReadLine();
        }
        public static long GetLong()
        {
            return long.Parse(Console.ReadLine());
        }
        public static string[] GetStringArray()
        {
            return Console.ReadLine().Split(' ');
        }
        public static long[] GetLongArray()
        {
            return Console.ReadLine().Split(' ').Select(i => long.Parse(i)).ToArray();
        }
        public static void PrintArray(long[] array)
        {
            foreach (var item in array)
            {
                Console.WriteLine(item);
            }
        }
        public static void PrintDouble(double d)
        {
            Console.WriteLine(string.Format("{0:f12}", d));
        }

       

    }

    internal class Library
    {
        // Gcd(最大公約数)
        public static long Gcd(long m, long n)
        {
            if (n == 0) return m;
            return Gcd(n, m % n);
        }

        // Lcm(最小公倍数)答えが 10^18を超えるとき -1 を返す
        public static long Lcm(long a, long b)
        {
            long POW18 = 1000000000000000000;
            long r = a / Gcd(a, b);
            if (r > (POW18 / b))
                return -1;
            else
                return (r * b);
        }


        public static long Mod = 1000000007;
        public static long ModPow(long a, long n)
        {
            long res = 1;
            while (n > 0)
            {
                if ((n & 1) == 1)
                {
                    res = res * a % Mod;
                }
                a = a * a % Mod;
                n >>= 1;
            }
            return res;
        }

        public static long ModInv(long a)
        {
            return ModPow(a, Mod - 2);
        }
        public static long ModDiv(long a, long b)
        {
            return a * ModInv(b) % Mod;
        }
        public static long ModAdd(long a, long b)
        {
            return (a + b) % Mod;
        }
        public static long ModSub(long a, long b)
        {
            return (a - b + Mod) % Mod;
        }
        public static long ModMul(long a, long b)
        {
            return a * b % Mod;
        }
        public static long ModFact(long n)
        {
            long res = 1;
            for (long i = 1; i <= n; i++)
            {
                res = res * i % Mod;
            }
            return res;
        }
        public static long ModComb(long n, long k)
        {
            if (n < k) return 0;
            if (n < 0 || k < 0) return 0;
            return ModFact(n) * ModInv(ModFact(k)) % Mod * ModInv(ModFact(n - k)) % Mod;
        }
        public static long ModPerm(long n, long k)
        {
            if (n < k) return 0;
            if (n < 0 || k < 0) return 0;
            return ModFact(n) * ModInv(ModFact(n - k)) % Mod;
        }



        // ダイクストラ法
        // 使用例:
        //int n = 5; // ノード数
        //var graph = new List<(int to, long cost)>[n];
        //    for (int i = 0; i<n; i++)
        //    {
        //        graph[i] = new List<(int to, long cost)>();
        //    }

        // エッジの追加 (例: ノード0からノード1へのコスト10のエッジ)
        //graph[0].Add((1, 10));
        //graph[0].Add((2, 3));
        //graph[1].Add((2, 1));
        //graph[1].Add((3, 2));
        //graph[2].Add((1, 4));
        //graph[2].Add((3, 8));
        //graph[2].Add((4, 2));
        //graph[3].Add((4, 7));
        //graph[4].Add((3, 9));

        // ダイクストラ法の呼び出し
        //int startNode = 0; // 開始ノード
        //var distances = Library.Dijkstra(n, graph, startNode);
        // 結果の表示
        //for (int i = 0; i<n; i++)
        //{
        //Console.WriteLine($"Node {i}: {distances[i]}");
        //}

        public static long[] Dijkstra(int n, List<(int to, long cost)>[] graph, int start)
        {
            var dist = new long[n];
            for (int i = 0; i < n; i++) dist[i] = long.MaxValue;
            dist[start] = 0;

            var pq = new PriorityQueue<(long dist, int node)>();
            pq.Enqueue((0, start));

            while (pq.Count > 0)
            {
                var (d, v) = pq.Dequeue();
                if (dist[v] < d) continue;

                foreach (var (to, cost) in graph[v])
                {
                    var newDist = d + cost;
                    if (newDist < dist[to])
                    {
                        dist[to] = newDist;
                        pq.Enqueue((newDist, to));
                    }
                }
            }

            return dist;
        }

        // 優先度付きキューの実装
        public class PriorityQueue<T> where T : IComparable<T>
        {
            private List<T> data;

            public PriorityQueue()
            {
                this.data = new List<T>();
            }

            public void Enqueue(T item)
            {
                data.Add(item);
                int ci = data.Count - 1;
                while (ci > 0)
                {
                    int pi = (ci - 1) / 2;
                    if (data[ci].CompareTo(data[pi]) >= 0) break;
                    var tmp = data[ci];
                    data[ci] = data[pi];
                    data[pi] = tmp;
                    ci = pi;
                }
            }

            public T Dequeue()
            {
                int li = data.Count - 1;
                var frontItem = data[0];
                data[0] = data[li];
                data.RemoveAt(li);

                --li;
                int pi = 0;
                while (true)
                {
                    int ci = pi * 2 + 1;
                    if (ci > li) break;
                    int rc = ci + 1;
                    if (rc <= li && data[rc].CompareTo(data[ci]) < 0)
                        ci = rc;
                    if (data[pi].CompareTo(data[ci]) <= 0) break;
                    var tmp = data[pi];
                    data[pi] = data[ci];
                    data[ci] = tmp;
                    pi = ci;
                }
                return frontItem;
            }

            public int Count => data.Count;
        }

        // Union-Find Treeの実装
        public class UnionFind
        {
            private int[] parent;
            private int[] rank;
            private int[] size;

            public UnionFind(int n)
            {
                parent = new int[n];
                rank = new int[n];
                size = new int[n];
                for (int i = 0; i < n; i++)
                {
                    parent[i] = i;
                    rank[i] = 0;
                    size[i] = 1;
                }
            }

            public int Find(int x)
            {
                if (parent[x] == x)
                {
                    return x;
                }
                else
                {
                    parent[x] = Find(parent[x]);
                    return parent[x];
                }
            }

            public void Union(int x, int y)
            {
                int rootX = Find(x);
                int rootY = Find(y);

                if (rootX != rootY)
                {
                    if (rank[rootX] < rank[rootY])
                    {
                        parent[rootX] = rootY;
                        size[rootY] += size[rootX];
                    }
                    else if (rank[rootX] > rank[rootY])
                    {
                        parent[rootY] = rootX;
                        size[rootX] += size[rootY];
                    }
                    else
                    {
                        parent[rootY] = rootX;
                        size[rootX] += size[rootY];
                        rank[rootX]++;
                    }
                }
            }
            public bool Same(int x, int y)
            {
                return Find(x) == Find(y);
            }

            public int Size(int x)
            {
                return size[Find(x)];
            }

            public int CountGroups()
            {
                int count = 0;
                for (int i = 0; i < parent.Length; i++)
                {
                    if (parent[i] == i)
                    {
                        count++;
                    }
                }
                return count;
            }
        }



    }
 }

提出情報

提出日時
問題 C - New Skill Acquired
ユーザ terakan315
言語 C# 11.0 (.NET 7.0.7)
得点 300
コード長 14216 Byte
結果 AC
実行時間 415 ms
メモリ 89052 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 2
AC × 30
セット名 テストケース
Sample sample_01.txt, sample_02.txt
All hand_01.txt, hand_02.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, sample_01.txt, sample_02.txt
ケース名 結果 実行時間 メモリ
hand_01.txt AC 55 ms 26580 KiB
hand_02.txt AC 52 ms 26636 KiB
random_01.txt AC 306 ms 84108 KiB
random_02.txt AC 68 ms 31152 KiB
random_03.txt AC 383 ms 89052 KiB
random_04.txt AC 284 ms 76240 KiB
random_05.txt AC 410 ms 89024 KiB
random_06.txt AC 288 ms 77024 KiB
random_07.txt AC 397 ms 88860 KiB
random_08.txt AC 154 ms 82852 KiB
random_09.txt AC 373 ms 87176 KiB
random_10.txt AC 415 ms 85104 KiB
random_11.txt AC 222 ms 87312 KiB
random_12.txt AC 368 ms 88044 KiB
random_13.txt AC 402 ms 88200 KiB
random_14.txt AC 396 ms 88048 KiB
random_15.txt AC 414 ms 88388 KiB
random_16.txt AC 157 ms 66452 KiB
random_17.txt AC 312 ms 85292 KiB
random_18.txt AC 73 ms 36160 KiB
random_19.txt AC 190 ms 70476 KiB
random_20.txt AC 257 ms 72892 KiB
random_21.txt AC 52 ms 27764 KiB
random_22.txt AC 96 ms 45972 KiB
random_23.txt AC 296 ms 81424 KiB
random_24.txt AC 106 ms 49292 KiB
random_25.txt AC 183 ms 70508 KiB
random_26.txt AC 68 ms 31864 KiB
sample_01.txt AC 56 ms 26448 KiB
sample_02.txt AC 49 ms 26556 KiB