Files
problemas-para-competicao-p…/rede-anel-estelar/src/alternative-ac.py

60 lines
1.3 KiB
Python

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")