feat: new graph problem formatted.
This commit is contained in:
60
rede-anel-estelar/src/alternative-ac.py
Normal file
60
rede-anel-estelar/src/alternative-ac.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from collections import deque
|
||||
|
||||
|
||||
def check_connectivity(adj, n):
|
||||
vis = [False for _ in range(n)]
|
||||
def dfs(x):
|
||||
vis[x] = True
|
||||
for v in adj[x]:
|
||||
if not vis[v]:
|
||||
dfs(v)
|
||||
dfs(0)
|
||||
return all(vis)
|
||||
|
||||
|
||||
def check_cthulhu(adj, degree, n):
|
||||
marked = [False for _ in range(n)]
|
||||
dq = deque([])
|
||||
for i, d in enumerate(degree):
|
||||
if d == 1:
|
||||
dq.append(i)
|
||||
marked[i] = True
|
||||
|
||||
while len(dq) != 0:
|
||||
i = dq.popleft()
|
||||
for v in adj[i]:
|
||||
if not marked[v]:
|
||||
degree[v] -= 1
|
||||
if degree[v] == 1:
|
||||
dq.append(v)
|
||||
marked[v] = True
|
||||
|
||||
# if all are marked it means that there was no cycle
|
||||
if all(marked):
|
||||
return False
|
||||
|
||||
# if some of the non-marked vertices does not have degree 2, it is not a simple cycle
|
||||
for v in range(n):
|
||||
if not marked[v] and degree[v] != 2:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
n, m = map(int, input().split())
|
||||
adj = [[] for _ in range(n)]
|
||||
degree = [0] * n
|
||||
|
||||
for i in range(m):
|
||||
u, v = map(int, input().split())
|
||||
u -= 1
|
||||
v -= 1
|
||||
adj[u].append(v)
|
||||
adj[v].append(u)
|
||||
degree[u] += 1
|
||||
degree[v] += 1
|
||||
|
||||
if not check_connectivity(adj, n) or not check_cthulhu(adj, degree, n):
|
||||
print("OFFLINE")
|
||||
else:
|
||||
print("ONLINE")
|
||||
Reference in New Issue
Block a user