結果
| 問題 | No.479 頂点は要らない |
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-26 15:52:34 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,809 bytes |
| コンパイル時間 | 335 ms |
| コンパイル使用メモリ | 82,192 KB |
| 実行使用メモリ | 111,588 KB |
| 最終ジャッジ日時 | 2025-03-26 15:53:04 |
| 合計ジャッジ時間 | 5,791 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 38 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
idx = 0
n = int(input[idx])
idx += 1
m = int(input[idx])
idx += 1
edges = [[] for _ in range(n)]
for _ in range(m):
a = int(input[idx])
idx += 1
b = int(input[idx])
idx += 1
if a > b:
a, b = b, a
edges[a].append(b)
edges[b].append(a)
selected = [False] * n
# Initialize selected with all the u of each edge (u, v)
for u in range(n):
for v in edges[u]:
if u < v:
selected[u] = True
# Iterate vertices from largest to smallest
for i in reversed(range(n)):
if not selected[i]:
continue
can_remove = True
# Check all adjacent edges
for j in edges[i]:
if j < i:
# This edge is stored in the j's list as u, but here i is the larger one
# The edge is (j, i), so if j is not selected, then i must be kept
if not selected[j]:
can_remove = False
break
else:
# The edge is (i, j), where i is the smaller one. But since we are processing i in reverse order, j could be larger.
# Since i was initially selected as the smaller vertex, but if we remove i, we need to check if j is selected.
if not selected[j]:
can_remove = False
break
if can_remove:
selected[i] = False
# Calculate the sum
total = 0
for i in range(n):
if selected[i]:
total += (1 << i)
# Convert to binary
if total == 0:
print("0")
else:
print(bin(total)[2:])
print()
if __name__ == '__main__':
main()
lam6er