結果

問題 No.1898 Battle and Exchange
ユーザー chineristAC
提出日時 2022-04-08 22:46:39
言語 PyPy3
(7.3.15)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 2,431 bytes
コンパイル時間 319 ms
コンパイル使用メモリ 82,276 KB
実行使用メモリ 273,220 KB
最終ジャッジ日時 2024-11-28 13:39:14
合計ジャッジ時間 77,336 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 55 TLE * 3
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys,random,bisect
from collections import deque,defaultdict
from heapq import heapify,heappop,heappush
from itertools import permutations
from math import log,gcd
input = lambda :sys.stdin.readline().rstrip()
mi = lambda :map(int,input().split())
li = lambda :list(mi())
N,M = mi()
edge = [[] for v in range(N)]
for _ in range(M):
u,v = mi()
edge[u-1].append(v-1)
edge[v-1].append(u-1)
_card = []
for i in range(N):
a,b,c = mi()
_card.append(sorted([a,b,c]))
def cond(k):
card = [[a for a in _card[v]] for v in range(N)]
my_card = [1,1,k-2]
if sum(card[0]) >= k:
return False
if my_card[0] < card[0][2]:
my_card[0],card[0][2] = card[0][2],my_card[0]
card[0].sort()
my_card.sort()
pq = [(-card[0][2],0)]
visit = [False] * N
visit[0] = True
f = False
for v in edge[0]:
if sum(card[v]) < sum(my_card):
f = True
heappush(pq,(-card[v][2],v))
visit[v] = True
if not f:
return False
strong = []
for v in range(N):
if visit[v]:
for nv in edge[v]:
if not visit[nv]:
heappush(strong,(sum(card[nv]),nv))
while True:
#print(visit)
#print(card)
#print(my_card)
#print(pq)
change = False
new_v = False
val,v = heappop(pq)
val = -val
#print(val,v)
i = card[v].index(val)
if val > my_card[0]:
change = True
my_card[0],card[v][i] = card[v][i],my_card[0]
card[v].sort()
my_card.sort()
heappush(pq,(-card[v][2],v))
while strong:
val,nv = strong[0]
if visit[nv]:
heappop(strong)
continue
if val < sum(my_card):
new_v = True
heappop(strong)
visit[nv] = True
heappush(pq,(-card[nv][2],nv))
for nnv in edge[nv]:
if not visit[nnv]:
heappush(strong,(sum(card[nnv]),nnv))
else:
break
if not change and not new_v:
break
return visit[-1]
ok = 10**9
ng = 2
while ok-ng>1:
mid = (ok+ng)//2
if cond(mid):
ok = mid
else:
ng = mid
print(1,1,ok-2)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0