buf = [''for i in range(205)]
n = 0defissym(x):return x!=' 'and x!='-'and x!='|'and x!='\n'defdfs(r,c):
print('{0}('.format(buf[r][c]),end='')
if r+1<n and buf[r+1][c]=='|':
j = c-1while j>=0and buf[r+2][j]=='-':j-=1for i in range(j+1,min(len(buf[r+3]),len(buf[r+2]))):
if (buf[r+2][i]==' 'or buf[r+2][i])=='\n':breakif issym(buf[r+3][i]):dfs(r+3,i)
print(')',end='')
defproc():global n
T = int(input())
while T:
T-=1
n = 0
buf[0] = input()
while buf[n]!='#':
n+=1
line = input()
buf[n] = line
print('(',end='')
for i,each in enumerate(buf[0]):
if each!=' ':dfs(0,i);break
print(')')
proc()
direction = [(-1,0,0,0),(1,0,0,0),(0,-1,0,1),(0,1,0,1),(0,0,-1,2),(0,0,1,2)]
x,y,z = set([1,500]),set([1,500]),set([1,500])
defadd(s,u,v):s.add(u);s.add(u+v)
defsetsort(s):return sorted(list(s))
deffind(s,t):for i in range(len(s)):
if s[i]>=t:return i
defmidin(x,i,u,v):
m=(x[i]+x[i+1])/2return m>u and m<v
defbound(x,l):return x>=0and x<l
defdf(s,i):return s[i+1]-s[i]
deffloodfill(graph,l1,l2,l3):global x,y,z
defdfs(i,j,k,adj_area):global direction
nonlocal graph,vis,area,vol
a,b,c = df(x,i),df(y,j),df(z,k)
if (i,j,k) in vis:returnif graph[i][j][k]==1:area+=adj_area;return
vis.add((i,j,k))
vol += a*b*c
ar = [b*c,a*c,a*b]
for m,n,t,h in direction:
ni,nj,nk = i+m,j+n,t+k
if bound(ni,l1) and bound(nj,l2) and bound(nk,l3):
if (x[ni],x[nj],x[nk]) == (3,3,3):print('*****',i,j,k)
dfs(ni,nj,nk,ar[h])
vis = set()
area,vol = 0,0
dfs(0,0,0,0);
print(area,501**3-vol)
defproc():global x,y,z
T = int(input())
for i in range(T):
x,y,z = set([0,1,500,501]),set([0,1,500,501]),set([0,1,500,501])
nodes = set()
for j in range(int(input())):
coor = input().split(' ')
x0,y0,z0,x1,y1,z1 = [int(k) for k in coor]
add(x,x0,x1);add(y,y0,y1);add(z,z0,z1)
nodes.add((x0,y0,z0,x0+x1,y0+y1,z0+z1))
x,y,z = setsort(x),setsort(y),setsort(z)
l1,l2,l3 = len(x)-1,len(y)-1,len(z)-1
graph = [[[0for k in range(l3)]for j in range(l2)] for i in range(l1)]
#init the graphfor node in nodes:
i0,j0,k0 = find(x,node[0]),find(y,node[1]),find(z,node[2])
i1,j1,k1 = find(x,node[3]),find(y,node[4]),find(z,node[5])
for i in range(i0,i1):
for j in range(j0,j1):
for k in range(k0,k1):
graph[i][j][k]=1
floodfill(graph,l1,l2,l3)
graph = [[] for i in range(52)]
vertex = [0]*52defID(s):return ord(s[0])-ord('A')+(26if s[1]=='+'else0)
defMID(id):return id-26if id>=26else id+26defnext(id,k,j,s):
m = (k+j)%8return ID(s[m:m+2]) if s[m:m+2]!='00'else -1defproc():global graph,vertex
while1:
T = input()
graph,vertex = [set() for i in range(52)],[0]*52if T=='':break
line = input().split(' ')
for s in line:
for k in range(0,len(s),2):
if s[k:k+2]=='00':continue
node = ID(s[k:k+2])
for j in range(2,8,2):
graph[MID(node)].add(next(node,k,j,s))
vertex[node]=1for each in range(52):
if vertex[each]==0:graph[each]=set()
print(graph)
if(topsort()):print('unbounded')
else:print('bounded')
deftopsort():global graph,vertex
defdfs(u):nonlocal vis
vis[u]=-1for v in graph[u]:
if vis[v]==-1:print(v);returnTrueif vis[v]==0and dfs(v):returnTrue
vis[u]=1returnFalse
vis = [0]*52for i in range(52):
if vertex[i] and dfs(i):returnTruereturnFalse
proc()
inf = 1<<20
d=[inf]*10000defrevbfs(graph,u):global d
q = deque([u])
d[u] = 0
vis = [0]*10000
vis[u]=1while len(q):
t = q.popleft()
for e in graph[t]:
v,c = e[0],e[1]
if vis[v]:continue
d[v] = d[t]+1
vis[v]=1
q.append(v)
defbfs(graph,u):global d
vis = [0]*10000
vis[u]=1
next = [u]
for i in range(d[u]):
min_color = 10**9+1for t in next:
for e in graph[t]:
v,c = e[0],e[1]
if d[v]==d[t]-1:
min_color = min(c,min_color)
print(min_color,end=' ')
next_2 = []
for t in next:
for e in graph[t]:
v,c = e[0],e[1]
if vis[v]==0and d[v]==d[t]-1and c== min_color:
vis[v]=1
next_2.append(v)
next=next_2
defproc():
graph = [[]for i in range(10000)]
line=input().split(' ')
n,m = [int(i)for i in line]
for j in range(m):
line = input().split(' ')
a,b,c = [int(i)for i in line]
graph[a].append((b,c))
graph[b].append((a,c))
revbfs(graph,n)
print(d[1])
bfs(graph,1)
proc()
x,y,r = [],[],[]
_in,_out = 1000,1000defconnected(i,j):global x,y,r1
return (x[i]-x[j])**2+(y[i]-y[j])**2<=(r[i]+r[j])**2defsolve(n):defdfs(u):global x,y,r,_in,_out
nonlocal n,vis
if y[u]-r[u]<=0:returnTrueif x[u]-r[u]<=0:_in = min(_in,y[u]-(r[u]**2-x[u]**2)**(1/2))
if x[u]+r[u]>=1000:_out=min(_out,y[u]-(r[u]**2 - (1000-x[u])**2)**(1/2))
for i in range(n):
if vis[i]==0and connected(u,i):
vis[i]=1if dfs(i):returnTrueglobal x,y,r
vis = [0]*n
for i in range(n):
if vis[i]==0and y[i]+r[i]>=1000:
vis[i]=1if dfs(i):print('impossible');returnFalse
print(_in,_out)
defproc():global x,y,r
for i in range(int(input())):
a,b,c = [int(k) for k in input().split(' ')]
x.append(a);y.append(b);r.append(c);
solve(i+1)
proc()
defreconstruct(bfs,dfs,bfs_index):
stack = [dfs[0]]
ans = [[] for i in range(len(bfs)+1)]
for u in dfs[1:]:
while len(stack):
root = stack[-1]
if (bfs_index[u] == bfs_index[root]+1and len(stack)>1) or bfs_index[u]<bfs_index[root]:
stack.pop()
else:
stack.append(u)
ans[root].append(u)
break
print(ans)
defproc():for i in range(int(input())):
bfs = [int(v) for v in input().split(' ')]
dfs = [int(v) for v in input().split(' ')]
bfs_index = [0]*(len(bfs)+1)
for k,v in enumerate(bfs):bfs_index[v] = k
reconstruct(bfs,dfs,bfs_index)
defreconstruct(bfs,dfs,bfs_index):defadd_son_node(stack_2,ans_2,d_2,next_2):
d_2[depth+1]=1
stack_2.append((u,depth+1));ans_2[root]=ans[root]+[u]
next_2.append((stack_2,ans_2,d_2))
n = len(bfs)+1;_stack = [(dfs[0],0)]
_ans = [[] for i in range(n)];_d = [-1]*n
next = [(_stack,_ans,_d)]
for u in dfs[1:]:
next_2 = []
for state in next:
stack,ans,d = state
while len(stack):
root,depth = stack[-1][0],stack[-1][1]
if bfs_index[u]<bfs_index[root]:
stack.pop()
elif bfs_index[u]==bfs_index[root]+1:
if d[depth+1]==-1or len(stack)<=1:#作为该层第一个儿子
add_son_node(stack.copy(),ans.copy(),d.copy(),next_2)
stack.pop()#作为兄弟else:#作为任意一个儿子
add_son_node(stack.copy(),ans.copy(),d.copy(),next_2)
break
next = next_2
for each in next:print(each[1])
proc()
road = []
vis = [0]*1005
deg = [0]*1005defdfs(i):global road,vis,deg
if vis[i]==1:return0
vis[i]=1
k=len(road[i])&1for v in road[i]:
k+= dfs(v)
return k
defsolve(vertexs):
res = 0for i in vertexs:
if vis[i]==0:
num = dfs(i)
assert(num%2==0)
if num>2:res+= (num-2)>>1
res+=1return res-1defproc():global road,deg,vis
while1:
line = input().split(' ')
v,e,t = [int(i) for i in line]
ifnot v|e|t:break
vertexs,road,vis = set(),[[] for i in range(1005)],[0]*1005for j in range(e):
line = input().split(' ')
a,b = [int(i) for i in line]
vertexs.add(a);vertexs.add(b)
road[a].append(b);road[b].append(a)
print(t*(e+solve(vertexs)))
(2)并查集:
pa = [i for i in range(1005)]
deffindset(x):return x if x==pa[x] else findset(pa[x])
defproc():global road,deg,vis,pa
while1:
line = input().split(' ')
v,e,t = [int(i) for i in line]
ifnot v|e|t:break
odd,c,deg, = [0]*1005,0,[0]*1005
pa = [i for i in range(1005)]
for j in range(e):
line = input().split(' ')
a,b = [int(i) for i in line]
s1,s2=findset(a),findset(b)
if s1!=s2:pa[s1] = s2;c+=1
deg[a]+=1;deg[b]+=1
vertexs.add(a);vertexs.add(b)
c = len(vertexs)-c#连通块数量for i in vertexs:
odd[findset(i)] += deg[i]&1
num = 0for i in vertexs:
if i==pa[i] and odd[i]>2:num+=odd[i]-2assert(num%2==0)
print(t*(e+num//2+c-1))