Problem:


Score : 500 points

Problem Statement

There are N towns numbered 1 to N and M roads. The i-th road connects Town A_i and Town B_i bidirectionally and has a length of C_i.

Takahashi will travel between these towns by car, passing through these roads. The fuel tank of his car can contain at most L liters of fuel, and one liter of fuel is consumed for each unit distance traveled. When visiting a town while traveling, he can full the tank (or choose not to do so). Travel that results in the tank becoming empty halfway on the road cannot be done.

Process the following Q queries:

The tank is now full. Find the minimum number of times he needs to full his tank while traveling from Town s_i to Town t_i. If Town t_i is unreachable, print -1.

Constraints

All values in input are integers.

2 \leq N \leq 300

0 \leq M \leq \frac{N(N-1)}{2}

1 \leq L \leq 10^9

1 \leq A_i, B_i \leq N

A_i \neq B_i

\left(A_i, B_i\right) \neq \left(A_j, B_j\right) (if i \neq j)

\left(A_i, B_i\right) \neq \left(B_j, A_j\right) (if i \neq j)

1 \leq C_i \leq 10^9

1 \leq Q \leq N\left(N-1\right)

1 \leq s_i, t_i \leq N

s_i \neq t_i

\left(s_i, t_i\right) \neq \left(s_j, t_j\right) (if i \neq j)

Input

Input is given from Standard Input in the following format:

N M L
A_1 B_1 C_1
:
A_M B_M C_M
Q
s_1 t_1
:
s_Q t_Q

Output

Print Q lines.

The i-th line should contain the minimum number of times the tank needs to be fulled while traveling from Town s_i to Town t_i. If Town t_i is unreachable, the line should contain -1 instead.

Sample Input 1

3 2 5
1 2 3
2 3 3
2
3 2
1 3

Sample Output 1

0
1

To travel from Town 3 to Town 2, we can use the second road to reach Town 2 without fueling the tank on the way.

To travel from Town 1 to Town 3, we can first use the first road to get to Town 2, full the tank, and use the second road to reach Town 3.

Sample Input 2

4 0 1
1
2 1

Sample Output 2

-1

There may be no road at all.

Sample Input 3

5 4 4
1 2 2
2 3 2
3 4 3
4 5 2
20
2 1
3 1
4 1
5 1
1 2
3 2
4 2
5 2
1 3
2 3
4 3
5 3
1 4
2 4
3 4
5 4
1 5
2 5
3 5
4 5

Sample Output 3

0
0
1
2
0
0
1
2
0
0
0
1
1
1
0
0
2
2
1
0



Sample input:
3 2 5
1 2 3
2 3 3
2
3 2
1 3


Sample output:
0
1

Submission status: Wrong Answer

Solution code:
import subprocess
import gzip, base64, os
import stat

gz = b'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'
bin = gzip.decompress(base64.b64decode(gz))
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
with open(pymain, "wb") as f:
    f.write(bin)
os.chmod(pymain, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
if p == "":
    pymain = "./" + pymain
subprocess.call(pymain)


# compiled by pythran
'''
#pythran export main2()
import numpy as np
i8 = np.int64
i4 = np.int32

def floyd_warshall(graph, n):
    for k in range(n):
        for i in range(n - 1):
            for j in range(i + 1, n):
                if graph[i, j] > graph[i, k] + graph[k, j]:
                    graph[i, j] = graph[i, k] + graph[k, j]

def clac(graph, n, L, inf):
    for i in range(n - 1):
        for j in range(i + 1, n):
            graph[i, j] = inf if graph[i, j] > L else 1

def main2():
    inf = 10**10
    stdin = open('/dev/stdin')
    N, M, L = map(int, stdin.readline().split())
    graph = np.empty((N, N), i8)
    for i in range(N):
        for j in range(N):
            graph[i, j] = inf
    for _ in range(M):
        a, b, c = map(int, stdin.readline().split())
        if a > b:
            a, b = b, a
        graph[a - 1, b - 1] = c
    Q = int(stdin.readline())
    s = np.empty(Q, i8)
    t = np.empty(Q, i8)
    for i in range(Q):
        s[i], t[i] = map(int, stdin.readline().split())
        if s[i] > t[i]:
            s[i], t[i] = t[i], s[i]

    floyd_warshall(graph, N)
    clac(graph, N, L, inf)
    floyd_warshall(graph, N)
    graph[graph > L] = 0
    x = []
    for i in range(Q):
        x.append(str(graph[s[i] - 1, t[i] - 1] - 1))
    print('\n'.join(x))
'''

Submission status: Wrong Answer

Solution code:
# coding: utf-8
MAX=pow(10, 9) * 300

N,M,L=map(int, raw_input().split())
Roads = [[ 0 if i == j else MAX for j in range(N)] for i in range(N)]
for i in range(M):
    f,t,c = map(int, raw_input().split())
    Roads[f-1][t-1] = c
    Roads[t-1][f-1] = c

for i in range(N):
    for j in range(N):
        for k in range(N):
            Roads[i][j] = min(Roads[i][j], Roads[i][k] + Roads[k][j])

Fuels = [[ 1 if i == j else MAX for j in range(N)] for i in range(N)]
for i in range(N):
    for j in range(N):
        if Roads[i][j] <= L:
            Fuels[i][j] = 1

for i in range(N):
    for j in range(N):
        for k in range(N):
            Fuels[i][j] = min(Fuels[i][j], Fuels[i][k] + Fuels[k][j])

Q=int(raw_input())
Queries = []
for i in range(Q):
    s, t = map(int, raw_input().split())
    v = Fuels[s-1][t-1]
    if v == MAX:
        print str(-1)
    else:
        print str(v -1)

Submission status: Wrong Answer

Solution code:
# coding: utf-8
MAX=pow(10, 9) * 300

N,M,L=map(int, raw_input().split())
Roads = [[MAX for j in range(N)] for i in range(N)]
for i in range(M):
    f,t,c = map(int, raw_input().split())
    Roads[f-1][t-1] = c
    Roads[t-1][f-1] = c

for i in range(N):
    for j in range(N):
        for k in range(N):
            Roads[i][j] = min(Roads[i][j], Roads[i][k] + Roads[k][j])

Fuels = [[MAX for j in range(N)] for i in range(N)]
for i in range(N):
    for j in range(N):
        if Roads[i][j] <= L:
            Fuels[i][j] = 1

for i in range(N):
    for j in range(N):
        for k in range(N):
            Fuels[i][j] = min(Fuels[i][j], Fuels[i][k] + Fuels[k][j])

Q=int(raw_input())
Queries = []
for i in range(Q):
    s, t = map(int, raw_input().split())
    v = Fuels[s-1][t-1]
    if v == MAX:
        print str(-1)
    else:
        print str(v -1)

Submission status: Wrong Answer

Solution code:
# coding: utf-8
MAX=pow(10, 9) * 300

N,M,L=map(int, raw_input().split())
Roads = {(i+1,j+1):MAX for i in range(N) for j in range(N)}
for i in range(M):
    f,t,c = map(int, raw_input().split())
    Roads[(f,t)] = c
    Roads[(t,f)] = c

for i in range(1,N+1):
    for j in range(1, N+1):
        for k in range(1, N+1):
            Roads[(i,j)] = min(Roads[(i,j)], Roads[(i,k)] + Roads[(k,j)])

Fuels = {(i+1,j+1):MAX for i in range(N) for j in range(N)}
for k,v in Roads.items():
    if v <= L:
        Fuels[k] = 1

for i in range(1,N+1):
    for j in range(1, N+1):
        for k in range(1, N+1):
            Fuels[(i,j)] = min(Fuels[(i,j)], Fuels[(i,k)] + Fuels[(k,j)])

Q=int(raw_input())
Queries = []
for i in range(Q):
    s, t = map(int, raw_input().split())
    v = Fuels.get((s,t), MAX)
    if v == MAX:
        print str(-1)
    else:
        print str(Fuels[(s,t)] -1)

Submission status: Wrong Answer

Solution code:
# coding: utf-8

N,M,L=map(int, raw_input().split())
Roads = {} # from, to, cost
for i in range(M):
    f,t,c = map(int, raw_input().split())
    Roads[(f,t)] = c
    Roads[(t,f)] = c

MAX=pow(10, 9) * 300
for i in range(1,N+1):
    for j in range(1, N+1):
        for k in range(1, N+1):
            Roads[(i,j)] = min(Roads.get((i,j), MAX), \
                Roads.get((i,k), MAX) + Roads.get((k,j), MAX))

Fuels = {}
for k,v in Roads.items():
    if v <= L:
        Fuels[k] = 1
    else:
        Fuels[k] = MAX

for i in range(1,N+1):
    for j in range(1, N+1):
        for k in range(1, N+1):
            Fuels[(i,j)] = min(Fuels.get((i,j), MAX), \
                Fuels.get((i,k), MAX) + Fuels.get((k,j), MAX))


Q=int(raw_input())
Queries = [] # from, to
for i in range(Q):
    s, t = map(int, raw_input().split())
    v = Fuels.get((s,t), MAX)
    if v == MAX:
        print str(-1)
    else:
        print str(Fuels[(s,t)] -1)

Submission status: Wrong Answer

Solution code:
# coding: utf-8

N,M,L=map(int, raw_input().split())
Roads = {} # from, to, cost
for i in range(M):
    f,t,c = map(int, raw_input().split())
    Roads[(f,t)] = c
    Roads[(t,f)] = c

MAX=pow(10, 9) * 300
for i in range(1,N+1):
    for j in range(1, N+1):
        for k in range(1, N+1):
            dij = Roads.get((i,j), MAX)
            dik = Roads.get((i,k), MAX)
            dkj = Roads.get((k,j), MAX)
            if dij > dik + dkj:
                Roads[(i,j)] = dik + dkj

Fuels = {}
for k,v in Roads.items():
    if v <= L:
        Fuels[k] = 1
    else:
        Fuels[k] = MAX

for i in range(1,N+1):
    for j in range(1, N+1):
        for k in range(1, N+1):
            dij = Fuels.get((i,j), MAX)
            dik = Fuels.get((i,k), MAX)
            dkj = Fuels.get((k,j), MAX)
            if dij > dik + dkj:
                Fuels[(i,j)] = dik + dkj


Q=int(raw_input())
Queries = [] # from, to
for i in range(Q):
    s, t = map(int, raw_input().split())
    if Fuels.has_key((s,t)):
        print str(Fuels[(s,t)] -1)
    else:
        print str(-1)