101 lines
No EOL
2.1 KiB
Python
101 lines
No EOL
2.1 KiB
Python
import sys
|
|
from collections import deque
|
|
|
|
reader = (int(token) for line in sys.stdin for token in line.split())
|
|
n = next(reader)
|
|
m = next(reader)
|
|
A = next(reader)
|
|
B = next(reader)
|
|
w = []
|
|
e = []
|
|
for i in range(n):
|
|
x = next(reader)
|
|
y = next(reader)
|
|
if x == 0:
|
|
w.append((y, i))
|
|
elif x == A:
|
|
e.append((y, i))
|
|
max_e = 2 * m
|
|
head = [-1] * n
|
|
rhead = [-1] * n
|
|
to = [0] * max_e
|
|
nxt = [0] * max_e
|
|
rto = [0] * max_e
|
|
rnxt = [0] * max_e
|
|
ec = 0
|
|
rec = 0
|
|
for _ in range(m):
|
|
u = next(reader) - 1
|
|
v = next(reader) - 1
|
|
k = next(reader)
|
|
to[ec] = v
|
|
nxt[ec] = head[u]
|
|
head[u] = ec
|
|
ec += 1
|
|
rto[rec] = u
|
|
rnxt[rec] = rhead[v]
|
|
rhead[v] = rec
|
|
rec += 1
|
|
if k == 2:
|
|
to[ec] = u
|
|
nxt[ec] = head[v]
|
|
head[v] = ec
|
|
ec += 1
|
|
rto[rec] = v
|
|
rnxt[rec] = rhead[u]
|
|
rhead[u] = rec
|
|
rec += 1
|
|
vis = [False] * n
|
|
q = deque([i for y, i in w])
|
|
for i in q:
|
|
vis[i] = True
|
|
while q:
|
|
v = q.popleft()
|
|
idx = head[v]
|
|
while idx != -1:
|
|
t = to[idx]
|
|
if not vis[t]:
|
|
vis[t] = True
|
|
q.append(t)
|
|
idx = nxt[idx]
|
|
valid_e = [(y, i) for y, i in e if vis[i]]
|
|
valid_e.sort()
|
|
mx = [-1] * n
|
|
q = deque()
|
|
for i in range(len(valid_e) - 1, -1, -1):
|
|
_, node = valid_e[i]
|
|
if mx[node] == -1:
|
|
mx[node] = i
|
|
q.append(node)
|
|
while q:
|
|
v = q.popleft()
|
|
idx = rhead[v]
|
|
while idx != -1:
|
|
t = rto[idx]
|
|
if mx[t] == -1:
|
|
mx[t] = i
|
|
q.append(t)
|
|
idx = rnxt[idx]
|
|
mn = [-1] * n
|
|
for i in range(len(valid_e)):
|
|
_, node = valid_e[i]
|
|
if mn[node] == -1:
|
|
mn[node] = i
|
|
q.append(node)
|
|
while q:
|
|
v = q.popleft()
|
|
idx = rhead[v]
|
|
while idx != -1:
|
|
t = rto[idx]
|
|
if mn[t] == -1:
|
|
mn[t] = i
|
|
q.append(t)
|
|
idx = rnxt[idx]
|
|
w.sort(reverse=True)
|
|
ans = []
|
|
for y, i in w:
|
|
if mx[i] != -1 and mn[i] != -1:
|
|
ans.append(str(mx[i] - mn[i] + 1))
|
|
else:
|
|
ans.append("0")
|
|
print('\n'.join(ans)) |