init
This commit is contained in:
commit
851751ea87
82 changed files with 2093 additions and 0 deletions
67
2A.py
Normal file
67
2A.py
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
import sys
|
||||
|
||||
|
||||
data = sys.stdin.read().split()
|
||||
ptr = 0
|
||||
|
||||
|
||||
while ptr < len(data):
|
||||
n = int(data[ptr])
|
||||
ptr += 1
|
||||
m = int(data[ptr])
|
||||
ptr += 1
|
||||
N = 2 * n
|
||||
g = [[] for _ in range(N)]
|
||||
gr = [[] for _ in range(N)]
|
||||
for _ in range(m):
|
||||
i1 = int(data[ptr]); ptr += 1
|
||||
e1 = int(data[ptr]); ptr += 1
|
||||
i2 = int(data[ptr]); ptr += 1
|
||||
e2 = int(data[ptr]); ptr += 1
|
||||
u_neg = 2 * i1 + (1 - e1)
|
||||
v_neg = 2 * i2 + (1 - e2)
|
||||
u_pos = 2 * i1 + e1
|
||||
v_pos = 2 * i2 + e2
|
||||
g[u_neg].append(v_pos)
|
||||
gr[v_pos].append(u_neg)
|
||||
g[v_neg].append(u_pos)
|
||||
gr[u_pos].append(v_neg)
|
||||
visited = [False] * N
|
||||
order = []
|
||||
for i in range(N):
|
||||
if not visited[i]:
|
||||
stack = [(i, 0)]
|
||||
visited[i] = True
|
||||
while stack:
|
||||
cur, edge_idx = stack[-1]
|
||||
if edge_idx < len(g[cur]):
|
||||
next_node = g[cur][edge_idx]
|
||||
stack[-1] = (cur, edge_idx + 1)
|
||||
if not visited[next_node]:
|
||||
visited[next_node] = True
|
||||
stack.append((next_node, 0))
|
||||
else:
|
||||
order.append(cur)
|
||||
stack.pop()
|
||||
comp = [-1] * N
|
||||
c_id = 0
|
||||
for i in range(N - 1, -1, -1):
|
||||
start_node = order[i]
|
||||
if comp[start_node] == -1:
|
||||
c_id += 1
|
||||
stack = [start_node]
|
||||
comp[start_node] = c_id
|
||||
while stack:
|
||||
cur = stack.pop()
|
||||
for neighbor in gr[cur]:
|
||||
if comp[neighbor] == -1:
|
||||
comp[neighbor] = c_id
|
||||
stack.append(neighbor)
|
||||
|
||||
res = []
|
||||
for i in range(n):
|
||||
if comp[2 * i + 1] > comp[2 * i]:
|
||||
res.append("1")
|
||||
else:
|
||||
res.append("0")
|
||||
print("".join(res))
|
||||
Loading…
Add table
Add a link
Reference in a new issue