60 lines
1.3 KiB
Python
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") |