baekjoon 20251229

This commit is contained in:
songyc macbook 2025-12-29 21:01:50 +09:00
parent 4a77cd5636
commit 60f343066c
2 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,38 @@
import sys
from collections import deque
input = sys.stdin.readline
INF = float("inf")
N = int(input())
indegree = [0]*(N+1)
build_info = [[0] for _ in range(N+1)]
for i in range(1,N+1) :
line = list(map(int, input().split()))
build_info[i][0] = line[0]
for n in line[1:] :
if n == -1 :
break
build_info[n].append(i)
indegree[i] += 1
dp = [0]*(N+1)
qu = deque()
for i in range(1,N+1) :
if indegree[i] == 0 :
qu.append(i)
dp[i] = build_info[i][0]
while qu :
now = qu.popleft()
for nxt in build_info[now][1:] :
indegree[nxt] -= 1
dp[nxt] = max(dp[nxt], dp[now] + build_info[nxt][0])
if indegree[nxt] == 0 :
qu.append(nxt)
print("\n".join(list(map(str, dp[1:]))))

View File

@ -0,0 +1,27 @@
s1, s2 = input(), input()
l1, l2 = len(s1), len(s2)
dp = [[0]*(l2+1) for _ in range(l1+1)]
for i in range(l1) :
for j in range(l2) :
if s1[i] == s2[j] :
dp[i+1][j+1] = dp[i][j] + 1
else :
dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1])
print(dp[l1][l2])
if dp[l1][l2] != 0 :
ans = []
p1, p2 = l1, l2
while p1 > 0 and p2 > 0 :
if dp[p1][p2-1] == dp[p1][p2] :
p2 -= 1
elif dp[p1-1][p2] == dp[p1][p2] :
p1 -= 1
else :
ans.append(s2[p2-1])
p1, p2 = p1-1, p2-1
print("".join(ans[::-1]))