Skip to content

Commit 4709d1b

Browse files
committed
백준 1005번 ACM Craft v2
문제 링크: https://www.acmicpc.net/problem/1005
1 parent bd1bd26 commit 4709d1b

File tree

6 files changed

+135
-0
lines changed

6 files changed

+135
-0
lines changed

백준 1005번 ACM Craft v2/main.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import sys
2+
sys.setrecursionlimit(100000)
3+
4+
5+
def solve():
6+
input = sys.stdin.readline
7+
T = int(input().strip())
8+
9+
for _ in range(T):
10+
N, K = map(int, input().strip().split())
11+
dts = [0] + list(map(int, input().strip().split()))
12+
dp = [-1 for _ in range(N + 1)]
13+
incoming = [[] for _ in range(N + 1)]
14+
for _ in range(K):
15+
to, fr = map(int, input().strip().split())
16+
incoming[fr].append(to)
17+
18+
target = int(input().strip())
19+
20+
dfs(dts, dp, incoming, target)
21+
22+
print(dp[target])
23+
24+
25+
def dfs(dts, dp, incoming, node):
26+
answer_local = 0
27+
28+
if len(incoming[node]) > 0:
29+
for fr in incoming[node]:
30+
if dp[fr] == -1:
31+
dfs(dts, dp, incoming, fr)
32+
33+
answer_local = max(answer_local, dp[fr])
34+
35+
dp[node] = answer_local + dts[node]
36+
else:
37+
dp[node] = dts[node]
38+
39+
40+
if __name__ == '__main__':
41+
solve()

백준 1005번 ACM Craft v2/test1.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2
2+
4 4
3+
10 1 100 10
4+
1 2
5+
1 3
6+
2 4
7+
3 4
8+
4
9+
8 8
10+
10 20 1 5 8 7 1 43
11+
1 2
12+
1 3
13+
2 4
14+
2 5
15+
3 6
16+
5 7
17+
6 7
18+
7 8
19+
7
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
120
2+
39

백준 1005번 ACM Craft v2/test2.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
5
2+
3 2
3+
1 2 3
4+
3 2
5+
2 1
6+
1
7+
4 3
8+
5 5 5 5
9+
1 2
10+
1 3
11+
2 3
12+
4
13+
5 10
14+
100000 99999 99997 99994 99990
15+
4 5
16+
3 5
17+
3 4
18+
2 5
19+
2 4
20+
2 3
21+
1 5
22+
1 4
23+
1 3
24+
1 2
25+
4
26+
4 3
27+
1 1 1 1
28+
1 2
29+
3 2
30+
1 4
31+
4
32+
7 8
33+
0 0 0 0 0 0 0
34+
1 2
35+
1 3
36+
2 4
37+
3 4
38+
4 5
39+
4 6
40+
5 7
41+
6 7
42+
7
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
6
2+
5
3+
399990
4+
2
5+
0
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import sys
2+
from pathlib import Path
3+
from unittest import TestCase
4+
from main import solve
5+
6+
7+
class Test(TestCase):
8+
def my_solve(self, testcase_input):
9+
sys.stdin = open(testcase_input, 'r')
10+
stdout = sys.stdout
11+
sys.stdout = open('stdout.txt', 'w')
12+
solve()
13+
sys.stdout.close()
14+
sys.stdout = stdout
15+
16+
def test_solve(self, testcase_number: str):
17+
self.my_solve('test' + testcase_number + '.txt')
18+
self.assertEqual(
19+
Path('test' + testcase_number + '_answer.txt').read_text().strip(),
20+
Path('stdout.txt').read_text().strip())
21+
22+
def test1_solve(self):
23+
self.test_solve('1')
24+
25+
def test2_solve(self):
26+
self.test_solve('2')

0 commit comments

Comments
 (0)