結果
| 問題 |
No.1744 Selfish Spies 1 (à la Princess' Perfectionism)
|
| コンテスト | |
| ユーザー |
kozy
|
| 提出日時 | 2021-11-14 21:31:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,045 bytes |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 82,428 KB |
| 実行使用メモリ | 381,464 KB |
| 最終ジャッジ日時 | 2024-11-30 06:34:21 |
| 合計ジャッジ時間 | 92,109 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 18 TLE * 13 |
ソースコード
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10000000)
from collections import deque
class Dinic():
def __init__(self,V):
self.v=V#頂点数
self.G=[list() for i in range(self.v)]
self.inf=float("inf")
self.level=[-1]*self.v
self.see=[0]*self.v
def add(self,fro,to,cost):
self.G[fro].append([cost,to,len(self.G[to])])#cost,to,rev
self.G[to].append([0,fro,len(self.G[fro])-1])
#sから各辺の距離をbfsで求める
def bfs(self,s):
self.level=[-1]*self.v
self.level[s]=0
d=deque()
d.append(s)
while d:
site=d.popleft()
for e in self.G[site]:
if self.level[e[1]]==-1 and e[0]>0:
self.level[e[1]]=self.level[site]+1
d.append(e[1])
#フローをsからtへ、f流すとどうなるか
#増加
def dfs(self,s,t,f):
if s==t:
return f
for i in range(self.see[s],len(self.G[s])):
e=self.G[s][i]
self.see[s]=i
if e[0]>0 and self.level[s]<self.level[e[1]]:
d=self.dfs(e[1],t,min(f,e[0]))
if d!=0:
self.G[s][i][0]-=d
self.G[e[1]][e[2]][0]+=d
return d
return 0
def maxflow(self,s,t):
ans=0
while True:
self.bfs(s)
if self.level[t]<0:
return ans
self.see=[0]*self.v
d=self.dfs(s,t,self.inf)
while d>0:
ans+=d
d=self.dfs(s,t,self.inf)
N,M,L=map(int,input().split())
A=list()
G=Dinic(N+M+2)
for i in range(L):
a,b=map(int,input().split())
A.append((a,N+b))
G.add(a,N+b,1)
for i in range(N):
G.add(0,i+1,1)
for i in range(M):
G.add(N+i+1,N+M+1,1)
a=G.maxflow(0,N+M+1)
L=G.G
R=list()
K=list()
for i in range(1,N+1):
for a,b,c in L[i]:
if a==0:
K.append([i,b])
S=set()
for n,m in K:
G=Dinic(N+M+2)
for a,b in A:
if (a,b)==(n,m):
continue
G.add(a,b,1)
for i in range(N):
G.add(0,i+1,1)
for i in range(M):
G.add(N+i+1,N+M+1,1)
a2=G.maxflow(0,N+M+1)
if a!=a2:
S.add((n,m))
for i in A:
if i in S:
print("No")
else:
print("Yes")
kozy