結果

問題 No.1610 She Loves Me, She Loves Me Not, ...
ユーザー lam6er
提出日時 2025-03-31 17:37:04
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 91 ms / 2,000 ms
コード長 2,016 bytes
コンパイル時間 178 ms
コンパイル使用メモリ 82,208 KB
実行使用メモリ 78,420 KB
最終ジャッジ日時 2025-03-31 17:37:40
合計ジャッジ時間 3,495 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
from collections import deque

def main():
    N, M = map(int, sys.stdin.readline().split())
    adj = [[] for _ in range(N+1)]
    original_degree = [0] * (N+1)
    for _ in range(M):
        a, b = map(int, sys.stdin.readline().split())
        adj[a].append(b)
        adj[b].append(a)
    for i in range(1, N+1):
        original_degree[i] = len(adj[i])
    
    visited = [False] * (N + 1)
    total_parity = 0
    
    for u in range(1, N+1):
        if not visited[u]:
            # Find component using BFS
            component = []
            q = deque()
            q.append(u)
            visited[u] = True
            component.append(u)
            while q:
                current = q.popleft()
                for v in adj[current]:
                    if not visited[v]:
                        visited[v] = True
                        component.append(v)
                        q.append(v)
            
            # Initialize temporary degrees and queue for leaves
            temp_deg = {node: original_degree[node] for node in component}
            queue = deque()
            for node in component:
                if temp_deg[node] == 1:
                    queue.append(node)
            
            count = 0
            processed = set()
            while queue:
                current = queue.popleft()
                if current in processed or temp_deg[current] != 1:
                    continue
                processed.add(current)
                count += 1
                # Find the neighbor with degree > 0
                for neighbor in adj[current]:
                    if temp_deg.get(neighbor, 0) > 0:
                        temp_deg[neighbor] -= 1
                        if temp_deg[neighbor] == 1:
                            queue.append(neighbor)
                temp_deg[current] = 0  # Mark as removed
            
            total_parity += count % 2
    
    print("Yes" if total_parity % 2 == 1 else "No")

if __name__ == "__main__":
    main()
0