結果
| 問題 |
No.2910 単体ホモロジー入門
|
| コンテスト | |
| ユーザー |
るこーそー
|
| 提出日時 | 2024-10-11 23:06:08 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,044 bytes |
| コンパイル時間 | 355 ms |
| コンパイル使用メモリ | 82,436 KB |
| 実行使用メモリ | 54,812 KB |
| 最終ジャッジ日時 | 2024-10-11 23:06:12 |
| 合計ジャッジ時間 | 3,520 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 29 WA * 18 |
ソースコード
import sys
sys.setrecursionlimit(10**5)
input=sys.stdin.readline
import pypyjit
pypyjit.set_param('max_unroll_recursion=-1')
class SCCGraph:
#ACLと同じ名前で実装したver.
def __init__(self,n):
self.n=n
self.g=[[] for _ in range(self.n)]
self.rg=[[] for _ in range(self.n)]
def add_edge(self,u,v):
self.g[u].append(v)
self.rg[v].append(u)
def _dfs(self,v,vis,order):
vis[v]=True
for nv in self.g[v]:
if vis[nv]:continue
self._dfs(nv,vis,order)
order.append(v)
return order
def _dfs_stack(self,v,vis,order):
stack=[(v,False)]
while stack:
v,done=stack.pop()
if done:
order.append(v)
else:
stack.append((v,True))
vis[v]=True
for nv in self.g[v]:
if vis[nv]:continue
stack.append((nv,False))
return order
def _rdfs(self,v,vis,group):
vis[v]=True
group.append(v)
for nv in self.rg[v]:
if vis[nv]:continue
self._rdfs(nv,vis,group)
return group
def _rdfs_stack(self,v,vis,group):
stack=[v]
while stack:
v=stack.pop()
vis[v]=True
group.append(v)
for nv in self.rg[v]:
if vis[nv]:continue
stack.append(nv)
return group
def scc(self,dfs_stack=False,rdfs_stack=False):
order=[]
vis=[False]*self.n
for v in range(self.n):
if vis[v]:continue
if dfs_stack:self._dfs_stack(v,vis,order)
else:self._dfs(v,vis,order)
order=order[::-1]
groups=[]
vis=[False]*self.n
for v in order:
if vis[v]:continue
groups.append(self._rdfs_stack(v,vis,[]) if rdfs_stack else self._rdfs(v,vis,[]))
return groups
n,m=map(int,input().split())
scc=SCCGraph(n)
for _ in range(m):
u,v=map(lambda x:int(x)-1,input().split())
scc.add_edge(u,v)
scc.add_edge(v,u)
V=sorted(set(map(lambda x:int(x)-1,input().split())))
V.sort()
groups=scc.scc()
for group in groups:
group.sort()
if group==V:
print('No')
exit()
print('Yes')
るこーそー