Submission #1607574


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
class Simple {
    int N, M;
    Tuple<int, int, int>[] aby;
    int Q;
    Tuple<int, int, int>[] vw;
    void Solve() {
        //input
        N = io.Int;
        M = io.Int;
        aby = new Tuple<int, int, int>[M];
        for (int i = 0; i < M; ++i) {
            int a = io.Int;
            int b = io.Int;
            int y = io.Int;
            aby[i] = Tuple.Create(a, b, y);
        }
        Q = io.Int;
        vw = new Tuple<int, int, int>[Q];
        for (int i = 0; i < Q; ++i) {
            int v = io.Int;
            int w = io.Int;
            vw[i] = Tuple.Create(v, w, i);
        }
        //cal
        var index = 0;
        var ans = new int[Q];
        var uf = new UnionFind();
        uf.Init(N);
        aby = aby.OrderByDescending(t => t.Item3).ToArray();
        vw = vw.OrderByDescending(t => t.Item2).ToArray();
        for (int i = 0; i < M;++i){
            while(index<Q&&vw[index].Item2>=aby[i].Item3){
                ans[vw[index].Item3] = uf.Size(vw[index].Item1);
                index++;
            }
            uf.Unite(aby[i].Item1,aby[i].Item2);
        }
        while(index<Q){            
            ans[vw[index].Item3] = uf.Size(vw[index].Item1);
            index++;
        }
        //ret
        for (int i = 0; i < Q; ++i)
            Console.WriteLine(ans[i]);
    }
    SimpleIO io = new SimpleIO();
    public static void Main(string[] args) { new Simple().Stream(); }
    void Stream() {
        Solve();
        io.writeFlush();
    }
}
class UnionFind {
    int[] dat;
    public void Init(int n) {
        dat = new int[n + 1];
        for (int i = 0; i <= n; ++i)
            dat[i] = -1;
    }
    public void Unite(int x, int y) {
        x = Root(x); y = Root(y);
        if (x == y) return;
        if (dat[y] < dat[x]) swap(ref x, ref y);
        dat[x] += dat[y];
        dat[y] = x;
    }
    public bool Find(int x, int y) { return Root(x) == Root(y); }
    public int Root(int x) { return dat[x] < 0 ? x : dat[x] = Root(dat[x]); }
    public int Size(int x) { return -dat[Root(x)]; }
    void swap(ref int a, ref int b) { int tmp = b; b = a; a = tmp; }
}
class SimpleIO {
    string[] nextBuffer;
    int BufferCnt;
    char[] cs = new char[] { ' ' };
    StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
    public SimpleIO() {
        nextBuffer = new string[0];
        BufferCnt = 0;
        Console.SetOut(sw);
    }
    public string Next() {
        if (BufferCnt < nextBuffer.Length)
            return nextBuffer[BufferCnt++];
        string st = Console.ReadLine();
        while (st == "")
            st = Console.ReadLine();
        nextBuffer = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
        BufferCnt = 0;
        return nextBuffer[BufferCnt++];
    }
    public string String => Next();
    public char Char => char.Parse(String);
    public int Int => int.Parse(String);
    public long Long => long.Parse(String);
    public double Double => double.Parse(String);
    public void writeFlush() { Console.Out.Flush(); }
}

Submission Info

Submission Time
Task D - 道路の老朽化対策について
User rui0422
Language C# (Mono 4.6.2.0)
Score 100
Code Size 3358 Byte
Status AC
Exec Time 614 ms
Memory 44648 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 50 / 50 50 / 50
Status
AC × 3
AC × 10
AC × 22
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
Subtask1 sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
sample_01.txt AC 26 ms 9300 KB
sample_02.txt AC 26 ms 11348 KB
sample_03.txt AC 26 ms 11348 KB
subtask1_01.txt AC 31 ms 9312 KB
subtask1_02.txt AC 30 ms 9312 KB
subtask1_03.txt AC 31 ms 11360 KB
subtask1_04.txt AC 29 ms 11396 KB
subtask1_05.txt AC 31 ms 11360 KB
subtask1_06.txt AC 31 ms 13408 KB
subtask1_07.txt AC 33 ms 11360 KB
subtask2_01.txt AC 578 ms 40192 KB
subtask2_02.txt AC 594 ms 42468 KB
subtask2_03.txt AC 603 ms 40188 KB
subtask2_04.txt AC 614 ms 40544 KB
subtask2_05.txt AC 344 ms 29480 KB
subtask2_06.txt AC 574 ms 37996 KB
subtask2_07.txt AC 591 ms 44648 KB
subtask2_08.txt AC 584 ms 40296 KB
subtask2_09.txt AC 603 ms 40544 KB
subtask2_10.txt AC 605 ms 42080 KB
subtask2_11.txt AC 605 ms 39904 KB
subtask2_12.txt AC 594 ms 38240 KB