init
This commit is contained in:
commit
851751ea87
82 changed files with 2093 additions and 0 deletions
101
1O.py
Normal file
101
1O.py
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
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))
|
||||
Loading…
Add table
Add a link
Reference in a new issue