Submission #36861631


Source Code Expand

// Not my code! Taken from https://atcoder.jp/contests/abc279/submissions/36844595
// and directly line by line converted to D language. Added "@safe:" directive
// at the top, moved "scanf" into a small @trusted wrapper function and replaced
// "printf" with "writeln". Replaced "scanf" with faster I/O code and removed
// global arrays. Arrays are dynamically allocated.

@safe:
import std.stdio, std.range, std.algorithm;

int main() {
    int n = readint;
    int q = readint;

    auto now = iota(n).array;
    auto past = iota(n + q).array;
    auto idx = iota(n + q).array;
    auto fa = [-1].replicate(n + q);

    int find_root(int x) {
        if (fa[x] == -1) {
            return x;
        }
        return fa[x] = find_root(fa[x]);
    }

    void unite(int x, int y) {
        if (find_root(x) != find_root(y) && find_root(x) != -1) {
            fa[find_root(x)] = find_root(y);
        }
    }

    int cntn = n - 1;
    int cnt = n - 1;
    while (q--) {
	int tp = readint;
	if (tp == 1) {
	    int x = readint;
	    int y = readint;
	    x--, y--;
	    unite(now[y], now[x]);
	    now[y] = ++cntn;
	    past[cntn] = y;
	} else if (tp == 2) {
	    int x = readint;
	    x--;
	    idx[++cnt] = now[x];
	} else {
	    int x = readint;
	    x--;
	    writeln(past[find_root(idx[x])] + 1);
	}
    }
    return 0;
}

int readint() {
    return fastio.readnum!int; // we can do it even faster than "scanf"
}

// Fast I/O

import std.stdio, std.array, std.ascii, std.exception;

struct fastio {
    shared static byte[64 * 1024] buf;
    shared static byte[] avail;

    static void fillbuf() @trusted {
        if (avail.empty)
            avail = cast(shared(byte[]))stdin.rawRead(cast(byte[])buf);
        enforce(!avail.empty, "EOF");
    }

    static bool fillbuf_nothrow() @trusted {
        if (avail.empty)
            avail = cast(shared(byte[]))stdin.rawRead(cast(byte[])buf);
        return !avail.empty;
    }

    static T readnum(T)() {
        bool negative = false;
        T ans = 0;
        fillbuf();
        while (std.ascii.isWhite(avail.front)) {
            avail = avail[1 .. $];
            fillbuf();
        }
        if (avail.front == '-') {
            negative = true;
            avail = avail[1 .. $];
            fillbuf();
        }
        enforce(avail.front >= '0' && avail.front <= '9', "bad format");
        while (avail.front >= '0' && avail.front <= '9') {
            ans = ans * 10 + (avail.front - '0');
            avail = avail[1 .. $];
            if (!fillbuf_nothrow())
                break;
        }
        return negative ? -ans : ans;
    }
}

Submission Info

Submission Time
Task F - BOX
User ssvb
Language D (GDC 9.2.1)
Score 500
Code Size 2714 Byte
Status AC
Exec Time 71 ms
Memory 14804 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 1
AC × 72
Set Name Test Cases
Sample sample_01.txt
All sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt
Case Name Status Exec Time Memory
sample_01.txt AC 26 ms 6788 KiB
test_01.txt AC 7 ms 6764 KiB
test_02.txt AC 44 ms 9852 KiB
test_03.txt AC 43 ms 9896 KiB
test_04.txt AC 40 ms 10036 KiB
test_05.txt AC 42 ms 10116 KiB
test_06.txt AC 40 ms 10000 KiB
test_07.txt AC 44 ms 10056 KiB
test_08.txt AC 43 ms 10056 KiB
test_09.txt AC 43 ms 10048 KiB
test_10.txt AC 44 ms 9856 KiB
test_11.txt AC 44 ms 10040 KiB
test_12.txt AC 42 ms 10048 KiB
test_13.txt AC 41 ms 10056 KiB
test_14.txt AC 41 ms 10036 KiB
test_15.txt AC 44 ms 10056 KiB
test_16.txt AC 41 ms 9992 KiB
test_17.txt AC 41 ms 10008 KiB
test_18.txt AC 42 ms 10120 KiB
test_19.txt AC 44 ms 9896 KiB
test_20.txt AC 41 ms 9896 KiB
test_21.txt AC 43 ms 10040 KiB
test_22.txt AC 46 ms 9964 KiB
test_23.txt AC 45 ms 9964 KiB
test_24.txt AC 44 ms 9876 KiB
test_25.txt AC 46 ms 9952 KiB
test_26.txt AC 44 ms 10052 KiB
test_27.txt AC 45 ms 9960 KiB
test_28.txt AC 47 ms 10320 KiB
test_29.txt AC 46 ms 9960 KiB
test_30.txt AC 45 ms 9876 KiB
test_31.txt AC 47 ms 10008 KiB
test_32.txt AC 52 ms 10580 KiB
test_33.txt AC 52 ms 11368 KiB
test_34.txt AC 57 ms 11272 KiB
test_35.txt AC 50 ms 11020 KiB
test_36.txt AC 52 ms 11308 KiB
test_37.txt AC 59 ms 13284 KiB
test_38.txt AC 71 ms 14260 KiB
test_39.txt AC 53 ms 10788 KiB
test_40.txt AC 49 ms 10220 KiB
test_41.txt AC 57 ms 12496 KiB
test_42.txt AC 60 ms 14608 KiB
test_43.txt AC 66 ms 14804 KiB
test_44.txt AC 60 ms 14740 KiB
test_45.txt AC 60 ms 14748 KiB
test_46.txt AC 58 ms 14716 KiB
test_47.txt AC 36 ms 14712 KiB
test_48.txt AC 44 ms 14648 KiB
test_49.txt AC 54 ms 14716 KiB
test_50.txt AC 49 ms 14788 KiB
test_51.txt AC 65 ms 14652 KiB
test_52.txt AC 63 ms 12384 KiB
test_53.txt AC 65 ms 12272 KiB
test_54.txt AC 67 ms 12428 KiB
test_55.txt AC 65 ms 12372 KiB
test_56.txt AC 65 ms 12412 KiB
test_57.txt AC 66 ms 12248 KiB
test_58.txt AC 67 ms 12380 KiB
test_59.txt AC 67 ms 12356 KiB
test_60.txt AC 63 ms 12428 KiB
test_61.txt AC 52 ms 11700 KiB
test_62.txt AC 54 ms 11620 KiB
test_63.txt AC 53 ms 11576 KiB
test_64.txt AC 54 ms 11480 KiB
test_65.txt AC 52 ms 11588 KiB
test_66.txt AC 52 ms 11704 KiB
test_67.txt AC 52 ms 11552 KiB
test_68.txt AC 52 ms 11436 KiB
test_69.txt AC 52 ms 11568 KiB
test_70.txt AC 39 ms 11700 KiB
test_71.txt AC 39 ms 11640 KiB