File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ import sys
2+ from collections import deque
3+ input = sys .stdin .readline
4+
5+ n = int (input ())
6+ m = int (input ())
7+
8+ indegree = [0 ] * (n + 1 ) # 간선 정보
9+
10+ edge = [[] for _ in range (n + 1 )] # 연결 그래프 초기화
11+
12+ for _ in range (m ):
13+ x , y , k = map (int , input ().split ()) # y부품 k개가 -> x가 됨
14+
15+ indegree [x ] += 1 # 간선 개수 추가
16+ edge [y ].append ((x , k ))
17+
18+ lines = [[0 ] * (n + 1 ) for _ in range (n + 1 )] # 각 기본 부품이 몇 개 있는지 (n개로 뒀지만 어차피 다음 코드에 기본 부품밖에 안 셈)
19+
20+ for i in range (1 , n + 1 ):
21+ if indegree [i ] == 0 : # 간선이 처음에 없으면 기본부품이다.
22+ lines [i ][i ] += 1 # 기본부품은 자기 자신의 개수 1로 설정.
23+
24+ q = deque () # 양방향 처리를 위해 deque사용.
25+
26+ for j in range (1 , n + 1 ):
27+ if indegree [j ] == 0 : # 간선이 없는 부품은 q에 넣어준다.
28+ q .append (j )
29+
30+ while q :
31+ now = q .popleft () # 현재 부품
32+
33+ # 그 부품이랑 연결된 중간 부품들 간선개수 줄이고, 부품개수 업데이트
34+ for i in edge [now ]:
35+ next , cost = i
36+ indegree [next ] -= 1
37+
38+ # 다음 부품의 간선이 없어지면 q에 넣음
39+ if indegree [next ] == 0 :
40+ q .append (next )
41+ # 다음 부품의 부품개수 = 현재 부품 * 이뤄지는 개수
42+ for j in range (1 , n + 1 ):
43+ lines [next ][j ] += lines [now ][j ] * cost
44+
45+ # 완제품의 부품들을 enumerate로 돌면서 0개 이상이면 부품 번호와 개수 출력
46+ for a , b in enumerate (lines [n ]):
47+ if b > 0 :
48+ print (a , b )
You can’t perform that action at this time.
0 commit comments