| Task: | Road network |
| Sender: | PLS2020 |
| Submission time: | 2020-10-03 15:16:43 +0300 |
| Language: | Python3 (CPython3) |
| Status: | READY |
| Result: | TIME LIMIT EXCEEDED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.04 s | details |
| #3 | ACCEPTED | 0.04 s | details |
| #4 | ACCEPTED | 0.04 s | details |
| #5 | ACCEPTED | 0.04 s | details |
| #6 | TIME LIMIT EXCEEDED | -- | details |
| #7 | TIME LIMIT EXCEEDED | -- | details |
| #8 | TIME LIMIT EXCEEDED | -- | details |
| #9 | TIME LIMIT EXCEEDED | -- | details |
| #10 | TIME LIMIT EXCEEDED | -- | details |
| #11 | ACCEPTED | 0.04 s | details |
Code
from queue import Queue
from itertools import islice
import sys
n, m = [int(x) for x in input().split()]
routes = []
for i in range(0, n + 1):
routes.append([])
for i in range(m):
a, b = [int(x) for x in input().split()]
routes[a].append(b)
solution = [0] * (n + 1)
# if we've reached this intersection from the currently
# processed node. The node that we care about is written into
# the array - if we havent reached it then it will be out of date -
# we can use this later on when finding an example of something that
# does not work
reached = [0] * (n + 1)
# Dynamic programming + search. Basically we go through
# each node and if we see a node for which we know that
# we can reach every other road
for i in range(1, n + 1):
q = Queue()
q.put(i)
visited = [i]
while not q.empty():
node = q.get()
reached[node] = i
#visited.append(node)
# We can reach every other node from
# this node - mark this one in the solution
# as well and continue
if solution[node] == 1:
solution[i] = 1
break
# Not sure yet, lets push this node's children
# on to the queue and continue
for c in routes[node]:
if reached[c] != i:
q.put(c)
if solution[i] == 1:
# in this case, every other node that we came from
# can also reach this one
# for x in visited:
# solution[x] = 1
continue
# Reached the end of the queue. Did we reach
# every node from this one?
for r in range(1, n + 1):
if reached[r] != i:
print("NO")
print(i, r)
sys.exit(0)
solution[i] = 1
print("YES")Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 10 20 8 1 9 5 6 10 6 1 ... |
| correct output |
|---|
| NO 7 1 |
| user output |
|---|
| NO 7 1 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 10 20 2 10 10 6 8 5 3 8 ... |
| correct output |
|---|
| NO 1 2 |
| user output |
|---|
| NO 1 2 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 10 20 10 2 1 5 8 3 5 6 ... |
| correct output |
|---|
| NO 9 1 |
| user output |
|---|
| NO 9 1 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 10 20 9 6 10 4 7 2 10 5 ... |
| correct output |
|---|
| NO 6 1 |
| user output |
|---|
| NO 6 1 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 10 20 5 9 10 2 3 5 7 4 ... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 6
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 200000 64780 62469 32706 84268 37795 14893 23995 68041 ... |
| correct output |
|---|
| NO 40590 1 |
| user output |
|---|
| (empty) |
Test 7
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 200000 74725 92399 25141 53472 70762 85785 47091 71621 ... |
| correct output |
|---|
| NO 96983 1 |
| user output |
|---|
| (empty) |
Test 8
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 200000 50342 88741 55031 42206 24989 54546 666 39964 ... |
| correct output |
|---|
| NO 1 68638 |
| user output |
|---|
| (empty) |
Test 9
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 200000 51243 54643 90493 3012 62110 9430 5809 45601 ... |
| correct output |
|---|
| NO 48024 1 |
| user output |
|---|
| (empty) |
Test 10
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 200000 5524 49109 87052 72192 46434 18442 67624 38661 ... |
| correct output |
|---|
| YES |
| user output |
|---|
| (empty) |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 7 10 1 2 2 1 1 4 5 4 ... |
| correct output |
|---|
| NO 2 3 |
| user output |
|---|
| NO 1 3 |
