Skip to content

Commit 9f28265

Browse files
committed
2021.01.30
1 parent 887919c commit 9f28265

File tree

5 files changed

+220
-34
lines changed

5 files changed

+220
-34
lines changed

cplus/test.cpp

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,54 @@
1-
#include <iostream>
1+
#include <stdio.h>
2+
#include <vector>
3+
#include <queue>
4+
#include <cstring>
5+
#include <algorithm>
26
using namespace std;
3-
4-
int main(void){
5-
ios::sync_with_stdio(false);
6-
double n1 = 2.555;
7-
double n2 = 2.565;
8-
9-
cout<<fixed;
10-
cout.precision(2);
11-
cout<<n1<<'\n';
12-
cout<<n2<<'\n';
13-
14-
return 0;
7+
const int MAX_V = 401;
8+
int N, P, visit[MAX_V], c[MAX_V][MAX_V], f[MAX_V][MAX_V], parent[MAX_V];
9+
vector<int> adj[MAX_V];
10+
11+
int maxFlow(int source, int sink) {
12+
int ret = 0;
13+
while (1) {
14+
memset(parent, -1, sizeof(parent));
15+
queue<int> q;
16+
q.push(source);
17+
while (!q.empty() && parent[sink]==-1){
18+
int cur = q.front();
19+
q.pop();
20+
for (int next : adj[cur]) {
21+
if (!visit[next] && c[cur][next] - f[cur][next] > 0 && parent[next] == -1) {
22+
parent[next] = cur;
23+
q.push(next);
24+
}
25+
}
26+
}
27+
if (parent[sink] == -1) break;
28+
int tmpFlow = 987654321;
29+
for (int i = sink; i != source; i = parent[i]) {
30+
tmpFlow = min(tmpFlow, c[parent[i]][i] - f[parent[i]][i]);
31+
if (i != sink && i != source) visit[i] = true;
32+
}
33+
for (int i = sink; i != source; i = parent[i]) {
34+
f[parent[i]][i] += tmpFlow;
35+
f[i][parent[i]] -= tmpFlow;
36+
}
37+
ret += tmpFlow;
38+
}
39+
return ret;
40+
}
41+
42+
int main() {
43+
scanf("%d %d", &N, &P);
44+
for (int i = 0; i < P; i++) {
45+
int a, b;
46+
scanf("%d %d", &a, &b);
47+
adj[a].push_back(b);
48+
adj[b].push_back(a);
49+
c[a][b] = 1;
50+
c[b][a] = 1;
51+
}
52+
printf("%d", maxFlow(1, 2));
53+
return 0;
1554
}

python/plat2/7616.py

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,83 @@
55

66
def dfs():
77
#global st,ed,adj,cap,fl,N,K,T
8-
ans = []
9-
chk = [0]*(N+1)
8+
ans=0
109
while True:
1110
visited = [-1]*(N+1)
12-
q = deque([st])
11+
q = [st]
1312
while q:
14-
n = q.popleft()
13+
n = q.pop()
1514
for nx in adj[n]:
16-
if chk[nx]==0 and visited[nx]==-1 and cap[n][nx] > fl[n][nx]:
15+
if visited[nx]==-1 and cap[n][nx] > fl[n][nx]:
1716
q.append(nx)
1817
visited[nx]=n
1918
if nx==ed:break
2019
if visited[ed]==-1:break
2120

2221
now = ed
23-
tmp = [ed]
2422
while now!=st:
25-
chk[now]=1
2623
fl[visited[now]][now]+=1
2724
fl[now][visited[now]]-=1
2825
now = visited[now]
29-
tmp.append(now)
30-
ans.append(tmp)
31-
chk[ed]=0
26+
ans+=1
27+
return ans
28+
29+
def bfs():
30+
ans = []
31+
while True:
32+
visited = [-1]*(N+1)
33+
q = deque([st])
34+
while q:
35+
n = q.popleft()
36+
for nx in adj[n]:
37+
if visited[nx]==-1 and fl[n][nx]:
38+
q.append(nx)
39+
visited[nx]=n
40+
if nx==ed:break
41+
if visited[ed]==-1:break
42+
now = ed
43+
tmp = [ed]
44+
while now!=st:
45+
fl[visited[now]][now]=0
46+
fl[now][visited[now]]=0
47+
now=visited[now]
48+
if now%2==0:
49+
tmp.append(now//2+1)
50+
ans.append([1]+tmp[::-1])
3251
print("Case %d:\n"%T)
3352
if len(ans)>=K:
3453
for row in ans[:K]:
35-
print(" ".join(map(str,row[::-1])))
36-
print("\n")
54+
print(" ".join(map(str,row))+"\n")
3755
print("\n")
3856
else:
3957
print("Impossible\n\n")
4058

41-
4259
st,ed = 1,2
4360
T = 0
4461
while True:
4562
T+=1
4663
K, N = map(int,input().split())
64+
tmp = N
4765
if K==0 and N==0:break
48-
cap = [[0]*(N+1) for _ in range(N+1)]
49-
fl = [[0]*(N+1) for _ in range(N+1)]
50-
adj = [[] for _ in range(N+1)]
51-
for i in range(1,N+1):
66+
N=N<<1|1
67+
cap = [[0]*(N) for _ in range(N)]
68+
fl = [[0]*(N) for _ in range(N)]
69+
adj = [[] for _ in range(N)]
70+
for i in range(1,tmp+1):
5271
row = list(map(int,input().split()))
72+
in_a = (i<<1)-2
73+
out_a = (i<<1)-1
74+
adj[in_a].append(out_a)
75+
cap[in_a][out_a]=1
5376
for r in row:
54-
cap[i][r]=1
55-
cap[r][i]=1
56-
adj[i]=row[::-1]
57-
dfs()
77+
in_b = (r<<1)-2
78+
out_b = (r<<1)-1
79+
adj[out_a].append(in_b)
80+
adj[in_b].append(out_a)
81+
cap[out_a][in_b]=1
82+
adj[out_b].append(in_a)
83+
adj[in_a].append(out_b)
84+
cap[out_b][in_a]=1
85+
dfs()
86+
bfs()
87+
#print(adj)

python/plat3/2316.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
5+
N, P = map(int,input().split())
6+
mN = N<<1|1
7+
arr = [[] for _ in range(mN)]
8+
cap = [[0]*mN for _ in range(mN)]
9+
fl = [[0]*mN for _ in range(mN)]
10+
11+
def dfs(st,ed):
12+
ans = 0
13+
while True:
14+
visited = [-1]*mN
15+
q = deque([st])
16+
visited[0]=0
17+
while q:
18+
#print(q)
19+
n = q.popleft()
20+
for nx in arr[n]:
21+
if visited[nx]==-1 and cap[n][nx]>fl[n][nx]:
22+
q.append(nx)
23+
visited[nx]=n
24+
if nx==ed:break
25+
if visited[ed]==-1:break
26+
now = ed
27+
while now!=st:
28+
fl[visited[now]][now]+=1
29+
fl[now][visited[now]]-=1
30+
now = visited[now]
31+
ans+=1
32+
return ans
33+
34+
for i in range(1,N+1):
35+
in_a = (i<<1)-2
36+
out_a = (i<<1)-1
37+
arr[in_a].append(out_a)
38+
cap[in_a][out_a]=1
39+
40+
for i in range(P):
41+
a,b = map(int,input().split())
42+
in_a = (a<<1)-2
43+
out_a = (a<<1)-1
44+
in_b = (b<<1)-2
45+
out_b = (b<<1)-1
46+
arr[out_a].append(in_b)
47+
arr[in_b].append(out_a)
48+
cap[out_a][in_b]=1
49+
arr[out_b].append(in_a)
50+
arr[in_a].append(out_b)
51+
cap[out_b][in_a]=1
52+
print(dfs(1,2))

python/plat3/3033.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import sys
2+
from collections import defaultdict
3+
input = sys.stdin.readline
4+
5+
H = 2147483647
6+
def hash(x):
7+
ret = 0
8+
for c in st[:x]:
9+
ret=(ret*256+c)%H
10+
return ret
11+
12+
def rabin(m):
13+
global L
14+
mul = (1<<((m-1)*8))%H
15+
H_x = hash(m)
16+
H_TABLE[H_x].append(0)
17+
for idx in range(1,L-m+1):
18+
H_x = (((H_x - st[idx-1]*mul)<<8) + st[idx+m-1])%H
19+
for i in H_TABLE[H_x]:
20+
if st[i:i+m]==st[idx:idx+m]:
21+
return True
22+
H_TABLE[H_x].append(idx)
23+
L = int(input())
24+
st = [ord(c)-ord('a') for c in input().strip()]
25+
l,r=1,L-1
26+
while l<=r:
27+
H_TABLE = defaultdict(list)
28+
mid = (l+r)>>1
29+
if rabin(mid):
30+
l = mid+1
31+
else:
32+
r = mid-1
33+
print(r)

python/plat3/9938.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import sys
2+
sys.setrecursionlimit(100000)
3+
input = sys.stdin.readline
4+
output = sys.stdout.write
5+
N, L = map(int,input().split())
6+
p = [num for num in range(L+1)]
7+
8+
def find(idx):
9+
if p[idx]!=idx:
10+
p[idx]=find(p[idx])
11+
return p[idx]
12+
13+
def Union(x,y):
14+
x = find(x)
15+
y = find(y)
16+
if x!=y:
17+
p[x]=y
18+
19+
for i in range(N):
20+
a,b = map(int,input().split())
21+
f_a,f_b = find(a),find(b)
22+
if f_a:
23+
if f_a!=f_b:
24+
p[f_a]=f_b
25+
else:
26+
p[f_a]=0
27+
output("LADICA\n")
28+
elif f_b:
29+
p[f_b]=0
30+
output("LADICA\n")
31+
else:
32+
output("SMECE\n")

0 commit comments

Comments
 (0)