Submission #42204570


Source Code Expand

Copy
import heapq
INF = pow(10,20) #
N,M,K = map(int, input().split()) # N: M:
edge = [set() for _ in range(N+1)] # edge[i]:i
for _ in range(M):
A,B = map(int, input().split()) # A: B:
edge[A].add(B) # (1)
edge[B].add(A) #
stamina = [-1 for _ in range(N+1)] # ()HP
hq = list() # (,)
heapq.heapify(hq)
for _ in range(K):
p,h = map(int, input().split()) # A: B:
heapq.heappush(hq,(-h,p)) # -1
stamina[p] = h
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
import heapq
INF = pow(10,20)                        # 無限大とする値。距離や頂点数から考えて十分大きい値にすること

N,M,K = map(int, input().split())         # N:頂点数 M:入力辺数

edge = [set() for _ in range(N+1)]      # edge[i]:頂点iから出ている辺

for _ in range(M):
    A,B = map(int, input().split())     # A:出発元頂点番号 B:行先頂点番号
    edge[A].add(B)                      # (同一頂点に向かう辺は1本であることが問題文で保証されていない場合は、最短辺のみが残るように工夫すること)
    edge[B].add(A)                      # 無向グラフなので逆側にも入れる

stamina = [-1 for _ in range(N+1)]      # ある頂点にいる(ことのできる)警備員の最大HP。各頂点に対し無限大で初期化。
hq = list()                             # 探索用優先度付きキュー。(警備員の残り体力,頂点番号)を追加
heapq.heapify(hq)

for _ in range(K):
    p,h = map(int, input().split())     # A:出発元頂点番号 B:行先頂点番号
    heapq.heappush(hq,(-h,p))           # 最大値を取り出したいので-1倍して入れる
    stamina[p] = h

while len(hq)!=0:
    h,p = heapq.heappop(hq)             # 優先度付きキューから残り体力最大の点を取り出し
    h = -1 * h                          # 最大値取り出しのために-1倍したのを戻す

    if stamina[p] == h:                 # (Q(v)←altではなく、更新毎に追加しているので、不要パターンがある。最良の場合のみ処理)
        for u in edge[p]:               # 取り出した頂点から出ている全ての辺に対して
            if stamina[u] < h - 1:      
                # より良い残り体力になるなら更新
                stamina[u] = h - 1
                heapq.heappush(hq,(-(h-1),u))   #更新した頂点からの接続点はより良くなる可能性があるので再調査

ans = list()
for i in range(1,N+1):
    if stamina[i] != -1:
        ans.append(i)

print(len(ans))
print(*ans)

Submission Info

Submission Time
Task E - Art Gallery on Graph
User tonomotohide
Language PyPy3 (7.3.0)
Score 475
Code Size 2142 Byte
Status AC
Exec Time 1328 ms
Memory 206060 KB

Judge Result

Set Name Sample All after_contest
Score / Max Score 0 / 0 475 / 475 0 / 0
Status
AC × 3
AC × 33
AC × 1
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 02_tree_00.txt, 02_tree_01.txt, 03_path_00.txt, 03_path_01.txt, 04_perfect_00.txt, 05_corner_1_00.txt, 05_corner_1_01.txt, 05_corner_1_02.txt, 05_corner_1_03.txt, 05_corner_1_04.txt, 05_corner_1_05.txt, 06_star_00.txt, 06_star_01.txt, 07_n_m_k_max_00.txt, 07_n_m_k_max_01.txt, 07_n_m_k_max_02.txt, 07_n_m_k_max_03.txt, 07_n_m_k_max_04.txt
after_contest 99_after_contest_00.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 62 ms 62560 KB
00_sample_01.txt AC 51 ms 62352 KB
00_sample_02.txt AC 49 ms 62412 KB
01_random_00.txt AC 168 ms 105824 KB
01_random_01.txt AC 95 ms 96324 KB
01_random_02.txt AC 685 ms 140744 KB
01_random_03.txt AC 779 ms 152720 KB
01_random_04.txt AC 176 ms 98024 KB
01_random_05.txt AC 561 ms 123720 KB
01_random_06.txt AC 505 ms 113096 KB
01_random_07.txt AC 434 ms 139108 KB
01_random_08.txt AC 140 ms 95420 KB
01_random_09.txt AC 85 ms 96192 KB
01_random_10.txt AC 687 ms 143872 KB
01_random_11.txt AC 818 ms 149952 KB
02_tree_00.txt AC 750 ms 157180 KB
02_tree_01.txt AC 449 ms 144728 KB
03_path_00.txt AC 430 ms 145948 KB
03_path_01.txt AC 420 ms 145836 KB
04_perfect_00.txt AC 319 ms 103472 KB
05_corner_1_00.txt AC 716 ms 165912 KB
05_corner_1_01.txt AC 684 ms 166144 KB
05_corner_1_02.txt AC 793 ms 165376 KB
05_corner_1_03.txt AC 837 ms 165408 KB
05_corner_1_04.txt AC 763 ms 161512 KB
05_corner_1_05.txt AC 771 ms 160708 KB
06_star_00.txt AC 744 ms 203764 KB
06_star_01.txt AC 773 ms 206060 KB
07_n_m_k_max_00.txt AC 1164 ms 177620 KB
07_n_m_k_max_01.txt AC 1211 ms 177000 KB
07_n_m_k_max_02.txt AC 1230 ms 176752 KB
07_n_m_k_max_03.txt AC 1275 ms 170384 KB
07_n_m_k_max_04.txt AC 1328 ms 177104 KB
99_after_contest_00.txt AC 858 ms 165316 KB


2025-04-14 (Mon)
23:59:08 +00:00