Submission #3043837


Source Code Expand

import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time,copy,functools

sys.setrecursionlimit(10**7)
inf = 10**20
eps = 1.0 / 10**10
mod = 10**9+7
dd = [(-1,0),(0,1),(1,0),(0,-1)]
ddn = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]

def LI(): return [int(x) for x in sys.stdin.readline().split()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def LF(): return [float(x) for x in sys.stdin.readline().split()]
def LS(): return sys.stdin.readline().split()
def I(): return int(sys.stdin.readline())
def F(): return float(sys.stdin.readline())
def S(): return input()
def pf(s): return print(s, flush=True)


def main():
    n,m = LI()
    s,t = LI()
    e = collections.defaultdict(list)
    for _ in range(m):
        u,v,d = LI()
        e[u].append((v,d))
        e[v].append((u,d))

    def search(s,t):
        d = collections.defaultdict(lambda: [inf, 0])
        d[s] = [0, 1]
        q = []
        heapq.heappush(q, (0, s))
        v = collections.defaultdict(bool)
        while len(q):
            k, u = heapq.heappop(q)
            if v[u]:
                continue
            v[u] = True

            if u == t:
                return d

            uc = d[u][1]

            for uv, ud in e[u]:
                if v[uv]:
                    continue
                vd = k + ud
                if d[uv][0] > vd:
                    d[uv] = [vd, uc]
                    heapq.heappush(q, (vd, uv))
                elif d[uv][0] == vd:
                    d[uv][1] += uc

        return d

    d1 = search(s,t)
    d2 = search(t,s)
    rd = d1[t][0]
    kk = rd / 2.0

    r = d1[t][1] ** 2
    for k in list(d1.keys()):
        t,c = d1[k]
        if t > kk:
            continue
        if t == kk:
            if d2[k][0] == t:
                r -= c**2 * d2[k][1]**2
            continue

        for uv, ud in e[k]:
            if t + ud <= kk or t + ud + d2[uv][0] != rd:
                continue
            r -= c * d2[uv][1]

    return r




print(main())

Submission Info

Submission Time
Task E - Avoiding Collision
User iehn
Language PyPy3 (2.4.0)
Score 0
Code Size 2125 Byte
Status WA
Exec Time 1998 ms
Memory 138328 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 700
Status
AC × 4
AC × 8
WA × 14
Set Name Test Cases
Sample sample01.txt, sample02.txt, sample03.txt, sample04.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, sample01.txt, sample02.txt, sample03.txt, sample04.txt
Case Name Status Exec Time Memory
01.txt AC 1086 ms 124888 KB
02.txt AC 1063 ms 117848 KB
03.txt WA 1640 ms 128152 KB
04.txt WA 1651 ms 129760 KB
05.txt WA 1695 ms 124772 KB
06.txt WA 1453 ms 124004 KB
07.txt WA 1749 ms 128988 KB
08.txt WA 806 ms 116772 KB
09.txt WA 1748 ms 130656 KB
10.txt WA 1536 ms 130140 KB
11.txt AC 1679 ms 121444 KB
12.txt AC 1586 ms 135396 KB
13.txt WA 1780 ms 128796 KB
14.txt WA 1841 ms 129500 KB
15.txt WA 1998 ms 127584 KB
16.txt WA 1740 ms 127580 KB
17.txt WA 1859 ms 130840 KB
18.txt WA 1823 ms 138328 KB
sample01.txt AC 275 ms 64236 KB
sample02.txt AC 273 ms 64364 KB
sample03.txt AC 272 ms 64364 KB
sample04.txt AC 273 ms 64236 KB