Skip to content

Commit 2e9161e

Browse files
committed
2021.01.12
1 parent 0b27a31 commit 2e9161e

File tree

5 files changed

+259
-0
lines changed

5 files changed

+259
-0
lines changed

cplus/test.cpp

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
struct Edge{
5+
int v, c, dual;
6+
Edge(){}
7+
Edge(int v, int c, int dual) : v(v), c(c), dual(dual) {}
8+
};
9+
10+
vector<Edge> g[10101];
11+
int k, n;
12+
const int s = 1 * 2 + 1;
13+
const int t = 2 * 2;
14+
15+
void addEdge(int s, int e, int x){
16+
g[s].emplace_back(e, 1, g[e].size());
17+
g[e].emplace_back(s, 0, g[s].size()-1);
18+
}
19+
20+
void init(){
21+
for(int i=0; i<10101; i++) g[i].clear();
22+
}
23+
24+
bool flow(){
25+
int path[10101] = {0};
26+
int par[10101]; memset(par, -1, sizeof par);
27+
queue<int> q; q.push(s);
28+
while(q.size()){
29+
int now = q.front(); q.pop();
30+
for(int x=0; x<g[now].size(); x++){
31+
auto i = g[now][x];
32+
int nxt = i.v;
33+
int cap = i.c;
34+
int dual = i.dual;
35+
if(par[nxt] == -1 && cap > 0){
36+
par[nxt] = now;
37+
path[nxt] = x;
38+
q.push(nxt);
39+
}
40+
}
41+
}
42+
if(par[t] == -1) return 0;
43+
44+
for(int i=t; i!=s; i=par[i]){
45+
int a = par[i], b = i;
46+
g[a][path[b]].c --;
47+
int dual = g[a][path[b]].dual;
48+
g[b][dual].c ++;
49+
}
50+
return 1;
51+
}
52+
53+
void print(){
54+
int prv = -2, now = s;
55+
while(now/2 != 2){
56+
if(now & 1) printf("%d ", now/2);
57+
prv = now;
58+
if(now % 2 == 0){
59+
now = now + 1; continue;
60+
}
61+
for(int i=0; i<g[now].size(); i++){
62+
int nxt = g[now][i].v;
63+
if(nxt/2 == now/2) continue;
64+
if(g[now][i].c == 0){
65+
g[now][i].c = 1;
66+
now = nxt;
67+
break;
68+
}
69+
}
70+
}
71+
printf("%d\n", 2);
72+
}
73+
74+
void solve(int tc){
75+
init();
76+
for(int i=1; i<=n; i++){
77+
addEdge(i*2, i*2+1, 1);
78+
int j; char c;
79+
while(1){
80+
scanf("%d%c", &j, &c);
81+
addEdge(i*2+1, j*2, 1);
82+
if(c == '\n') break;
83+
}
84+
}
85+
86+
printf("Case %d:\n", tc);
87+
for(int i=0; i<k; i++){
88+
if(!flow()){
89+
printf("Impossible\n\n"); return;
90+
}
91+
}
92+
93+
for(int i=0; i<k; i++) print();
94+
printf("\n");
95+
}
96+
97+
int main(){
98+
int asdf = 1;
99+
while(1){
100+
scanf("%d %d", &k, &n);
101+
if(!k && !n) break;
102+
solve(asdf++);
103+
}
104+
}

python/plat2/7616.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
print = sys.stdout.write
5+
6+
def dfs():
7+
#global st,ed,adj,cap,fl,N,K,T
8+
ans = []
9+
chk = [0]*(N+1)
10+
while True:
11+
visited = [-1]*(N+1)
12+
q = deque([st])
13+
while q:
14+
n = q.popleft()
15+
for nx in adj[n]:
16+
if chk[nx]==0 and visited[nx]==-1 and cap[n][nx] > fl[n][nx]:
17+
q.append(nx)
18+
visited[nx]=n
19+
if nx==ed:break
20+
if visited[ed]==-1:break
21+
22+
now = ed
23+
tmp = [ed]
24+
while now!=st:
25+
chk[now]=1
26+
fl[visited[now]][now]+=1
27+
fl[now][visited[now]]-=1
28+
now = visited[now]
29+
tmp.append(now)
30+
ans.append(tmp)
31+
chk[ed]=0
32+
print("Case %d:\n"%T)
33+
if len(ans)>=K:
34+
for row in ans[:K]:
35+
print(" ".join(map(str,row[::-1])))
36+
print("\n")
37+
print("\n")
38+
else:
39+
print("Impossible\n\n")
40+
41+
42+
st,ed = 1,2
43+
T = 0
44+
while True:
45+
T+=1
46+
K, N = map(int,input().split())
47+
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):
52+
row = list(map(int,input().split()))
53+
for r in row:
54+
cap[i][r]=1
55+
cap[r][i]=1
56+
adj[i]=row[::-1]
57+
dfs()

python/plat4/2188.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N, M = map(int,input().split())
5+
arr = [[]]
6+
for i in range(N):
7+
arr.append(list(map(int,input().split()[1:])))
8+
9+
p = [None]*201
10+
11+
def sol(idx):
12+
visited[idx]=True
13+
for num in arr[idx]:
14+
if p[num] is None or (not visited[p[num]] and sol(p[num])):
15+
p[num]=idx
16+
return True
17+
return False
18+
19+
ans = 0
20+
for i in range(1,N+1):
21+
visited = [False]*201
22+
if sol(i):ans+=1
23+
print(ans)

python/plat4/6086.py

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

python/plat5/1135.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N = int(input())
5+
arr = list(map(int,input().split()))
6+
adj = [[] for _ in range(N)]
7+
for idx,num in enumerate(arr[1:],1):
8+
adj[num].append(idx)
9+
10+
def dfs(idx):
11+
ret = 0
12+
tmp = []
13+
for num in adj[idx]:
14+
tmp.append(dfs(num))
15+
for time,num in enumerate(sorted(tmp,reverse=True),1):
16+
ret = max(ret,num+time)
17+
return ret
18+
19+
print(dfs(0))

0 commit comments

Comments
 (0)