Skip to content

Commit daec4b8

Browse files
committed
2021.03.20
1 parent 02bb5e7 commit daec4b8

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

python/gold2/7453.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
for i in range(N):
1212
for j in range(N):
1313
ab.append(a[i]+b[j])
14-
_cd = c[i]+d[i]
14+
_cd = c[i]+d[j]
1515
cd[_cd] = cd.get(_cd,0)+1
1616
ans = 0
1717
for num in ab:

python/plat2/1348.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import sys
2+
from collections import defaultdict
3+
input = sys.stdin.readline
4+
5+
R, C = map(int,input().split())
6+
7+
arr = [list(input().strip()) for _ in range(R)]
8+
9+
d = [(0,1),(1,0),(0,-1),(-1,0)]
10+
N = 201
11+
adj = [[] for _ in range(N)]
12+
dist = [[0]*N for _ in range(N)]
13+
car_num,park_num = 1,101
14+
for i in range(R):
15+
for j in range(C):
16+
if arr[i][j]=='C':
17+
arr[i][j]=car_num
18+
car_num+=1
19+
elif arr[i][j]=='P':
20+
arr[i][j]=park_num
21+
park_num+=1
22+
elif arr[i][j]=='X':
23+
arr[i][j] = -1
24+
else:
25+
arr[i][j] = 0
26+
if car_num==1:
27+
print(0)
28+
exit(0)
29+
if car_num+100>park_num:
30+
print(-1)
31+
exit(0)
32+
max_T = 0
33+
def bfs(y,x):
34+
global max_T
35+
visited = [[False]*C for _ in range(R)]
36+
q= [(y,x)]
37+
visited[y][x]=True
38+
lv = 0
39+
now_car = arr[y][x]
40+
while q:
41+
length = len(q)
42+
while length:
43+
length-=1
44+
ny,nx = q.pop(0)
45+
if 100<arr[ny][nx]:
46+
now_park = arr[ny][nx]
47+
adj[now_car].append(now_park)
48+
dist[now_car][now_park]=lv
49+
max_T=max(lv, max_T)
50+
for dy,dx in d:
51+
ty,tx = ny+dy,nx+dx
52+
if ty<0 or ty>=R or tx<0 or tx>=C:continue
53+
if visited[ty][tx]:continue
54+
if arr[ty][tx]==-1:continue
55+
visited[ty][tx]=True
56+
q.append((ty,tx))
57+
lv+=1
58+
59+
60+
for i in range(R):
61+
for j in range(C):
62+
if 0<arr[i][j]<101:
63+
bfs(i,j)
64+
def sol():
65+
ans = 0
66+
p = [None]*N
67+
def dfs(idx,T):
68+
if visited[idx]:return False
69+
visited[idx]=True
70+
for nx in adj[idx]:
71+
if(dist[idx][nx]>T):continue
72+
if p[nx] is None or dfs(p[nx],T):
73+
p[nx]=idx
74+
return True
75+
return False
76+
for i in range(1,car_num):
77+
visited = [False]*N
78+
if dfs(i,max_T):ans+=1
79+
return ans==car_num-1
80+
81+
ans = -1
82+
l,r = 0, 5001
83+
while l<=r:
84+
max_T = (l+r)>>1
85+
if sol():
86+
ans = max_T
87+
r = max_T-1
88+
else:
89+
l = max_T+1
90+
print(ans)

0 commit comments

Comments
 (0)