Submission #2483091


Source Code Expand

import std.stdio, std.array, std.string, std.conv, std.algorithm;
import std.typecons, std.range, std.random, std.math, std.container;
import std.numeric, std.bigint, core.bitop, std.bitmanip;

void main() {
    immutable long INF = 1L << 59;
    
    auto s = readln.split.map!(to!int);
    auto N = s[0];
    auto M = s[1];
    auto S = s[2];
    auto T = s[3];
    auto L = new int[](M);
    auto A = new int[][](M);
    auto W = new long[][](M);
    auto G = new Tuple!(int, long, int, long)[][](N);
    foreach (i; 0..M) {
        L[i] = readln.chomp.to!int;
        A[i] = readln.split.map!(to!int).array;
        W[i] = readln.split.map!(to!long).array;
        long acm1 = W[i].sum;
        long acm2 = 0;
        foreach (j; 0..L[i]-1) {
            acm2 += W[i][j];
            G[A[i][j]] ~= tuple(A[i][j+1], W[i][j], A[i].back, acm1);
            G[A[i][j+1]] ~= tuple(A[i][j], W[i][j], A[i].front, acm2);
            acm1 -= W[i][j];
        }
    }

    auto shortest = new long[](N);
    shortest.fill(INF);
    auto pq = new BinaryHeap!(Array!(Tuple!(int, long)), "a[1] > b[1]")();
    auto dist = new long[](N);

    pq.insert(tuple(T, 0L));
    while (!pq.empty) {
        auto t = pq.front;
        auto n = t[0];
        auto d = t[1];
        pq.removeFront;
        if (shortest[n] <= d) continue;
        shortest[n] = d;
        foreach (to; G[n]) {
            auto nn = to[0];
            auto nd = d + to[1];
            if (shortest[nn] <= nd) continue;
            pq.insert(tuple(nn, nd));
        }
    }


    long hi = 10L^^15;
    long lo = 0;
    
    while (hi - lo > 1) {
        long mid = (hi + lo) / 2;
        dist.fill(INF);
        pq.clear();
        pq.insert(tuple(S, 0L));
        bool ok = false;

        while (!pq.empty) {
            auto t = pq.front;
            auto n = t[0];
            auto d = t[1];
            pq.removeFront;
            if (n == T) {
                ok = true;
                break;
            }
            if (dist[n] <= d) continue;
            dist[n] = d;
            foreach (to; G[n]) {
                auto nn = to[0];
                auto nd = d + to[1];
                auto zzz = to[2];
                auto zzz_d = d + to[3];
                if (zzz_d + shortest[zzz] > mid) continue;
                if (dist[nn] <= nd) continue;
                if (nd > mid) continue;
                pq.insert(tuple(nn, nd));
            }
        }

        if (ok) hi = mid;
        else lo = mid;

    }
    
    hi.writeln;
}

Submission Info

Submission Time
Task C - メンテナンス明け
User nebukuro09
Language D (LDC 0.17.0)
Score 100
Code Size 2601 Byte
Status AC
Exec Time 985 ms
Memory 16252 KB

Judge Result

Set Name Subtask1 Subtask2
Score / Max Score 50 / 50 50 / 50
Status
AC × 52
AC × 6
Set Name Test Cases
Subtask1 small/00_sample00, small/00_sample01, small/00_sample02, small/10_small-0000, small/10_small-0001, small/10_small-0002, small/10_small-0003, small/10_small-0004, small/10_small-0005, small/10_small-0006, small/10_small-0007, small/10_small-0008, small/10_small-0009, small/10_small-0010, small/10_small-0011, small/10_small-0012, small/10_small-0013, small/10_small-0014, small/10_small-0015, small/10_small-0016, small/10_small-0017, small/10_small-0018, small/10_small-0019, small/30_max_small, small/40_simple_0000, small/40_simple_0001, small/40_simple_0002, small/40_simple_0003, small/40_simple_0004, small/40_simple_0005, small/40_simple_0006, small/40_simple_0007, small/40_simple_0008, small/40_simple_0009, small/40_simple_0010, small/40_simple_0011, small/40_simple_0012, small/40_simple_0013, small/40_simple_0014, small/40_simple_0015, small/40_simple_0016, small/40_simple_0017, small/40_simple_0018, small/40_simple_0019, small/90_dijkstra_killer_00, small/90_dijkstra_killer_01, small/91_tayama_killer_00, small/91_tayama_killer_01, small/91_tayama_killer_02, small/91_tayama_killer_03, small/91_tayama_killer_04, small/91_tayama_killer_05
Subtask2 large/20_large-00, large/20_large-01, large/20_large-02, large/20_large-03, large/20_large-04, large/31_max_large
Case Name Status Exec Time Memory
large/20_large-00 AC 145 ms 14656 KB
large/20_large-01 AC 346 ms 13436 KB
large/20_large-02 AC 174 ms 15100 KB
large/20_large-03 AC 882 ms 16252 KB
large/20_large-04 AC 985 ms 12924 KB
large/31_max_large AC 16 ms 9452 KB
small/00_sample00 AC 1 ms 256 KB
small/00_sample01 AC 1 ms 256 KB
small/00_sample02 AC 1 ms 256 KB
small/10_small-0000 AC 5 ms 380 KB
small/10_small-0001 AC 2 ms 380 KB
small/10_small-0002 AC 5 ms 380 KB
small/10_small-0003 AC 4 ms 380 KB
small/10_small-0004 AC 4 ms 380 KB
small/10_small-0005 AC 4 ms 380 KB
small/10_small-0006 AC 6 ms 380 KB
small/10_small-0007 AC 6 ms 380 KB
small/10_small-0008 AC 2 ms 380 KB
small/10_small-0009 AC 3 ms 380 KB
small/10_small-0010 AC 5 ms 380 KB
small/10_small-0011 AC 6 ms 380 KB
small/10_small-0012 AC 6 ms 380 KB
small/10_small-0013 AC 4 ms 380 KB
small/10_small-0014 AC 3 ms 380 KB
small/10_small-0015 AC 4 ms 380 KB
small/10_small-0016 AC 2 ms 380 KB
small/10_small-0017 AC 6 ms 380 KB
small/10_small-0018 AC 3 ms 380 KB
small/10_small-0019 AC 2 ms 380 KB
small/30_max_small AC 1 ms 380 KB
small/40_simple_0000 AC 1 ms 256 KB
small/40_simple_0001 AC 1 ms 256 KB
small/40_simple_0002 AC 1 ms 256 KB
small/40_simple_0003 AC 1 ms 256 KB
small/40_simple_0004 AC 1 ms 256 KB
small/40_simple_0005 AC 1 ms 256 KB
small/40_simple_0006 AC 1 ms 256 KB
small/40_simple_0007 AC 1 ms 256 KB
small/40_simple_0008 AC 1 ms 256 KB
small/40_simple_0009 AC 1 ms 256 KB
small/40_simple_0010 AC 1 ms 256 KB
small/40_simple_0011 AC 1 ms 256 KB
small/40_simple_0012 AC 1 ms 256 KB
small/40_simple_0013 AC 1 ms 256 KB
small/40_simple_0014 AC 1 ms 256 KB
small/40_simple_0015 AC 1 ms 256 KB
small/40_simple_0016 AC 1 ms 256 KB
small/40_simple_0017 AC 1 ms 256 KB
small/40_simple_0018 AC 1 ms 256 KB
small/40_simple_0019 AC 1 ms 256 KB
small/90_dijkstra_killer_00 AC 1 ms 256 KB
small/90_dijkstra_killer_01 AC 1 ms 256 KB
small/91_tayama_killer_00 AC 1 ms 256 KB
small/91_tayama_killer_01 AC 1 ms 256 KB
small/91_tayama_killer_02 AC 1 ms 256 KB
small/91_tayama_killer_03 AC 1 ms 256 KB
small/91_tayama_killer_04 AC 1 ms 256 KB
small/91_tayama_killer_05 AC 1 ms 256 KB