File tree Expand file tree Collapse file tree 3 files changed +134
-0
lines changed
Expand file tree Collapse file tree 3 files changed +134
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ @file 10-2.py
3+ @brief 팀 결성
4+ @desc 서로소 집합 알고리즘
5+ """
6+
7+ # 팀 합치기
8+ def union_parent (parent , a , b ):
9+ a = find_parent (parent , a )
10+ b = find_parent (parent , b )
11+ if a < b :
12+ parent [b ] = a
13+ else :
14+ parent [a ] = b
15+
16+
17+ # 같은 팀 여부 확인
18+ def find_parent (parent , x ):
19+ if parent [x ] != x :
20+ parent [x ] = find_parent (parent , parent [x ])
21+ return parent [x ]
22+
23+
24+ n , m = map (int , input ().split ())
25+ parent = [0 ] * (n + 1 )
26+
27+ for i in range (0 , n + 1 ):
28+ parent [i ] = i
29+
30+ for i in range (m ):
31+ op , a , b = map (int , input ().split ())
32+ if op == 0 :
33+ union_parent (parent , a , b )
34+ elif op == 1 :
35+ if find_parent (parent , a ) == find_parent (parent , b ):
36+ print ("YES" )
37+ else :
38+ print ("NO" )
Original file line number Diff line number Diff line change 1+ """
2+ @file 10-3.py
3+ @brief 도시 분할 계획
4+ @desc 백준 1647번, 최소 신장 트리, 크루스칼 알고리즘
5+
6+ 전체 그래프에서 2개의 최소 신장 트리 만들기
7+ -> 크루스칼 알고리즘으로 최소 신장 트리 찾은 후 최소 신장 트리를 구성하는 간선 중에서 가장 비용이 큰 간선을 제거함
8+ """
9+
10+
11+ def find_parent (parent , x ):
12+ if parent [x ] != x :
13+ parent [x ] = find_parent (parent , parent [x ])
14+ return parent [x ]
15+
16+
17+ def union_parent (parent , a , b ):
18+ a = find_parent (parent , a )
19+ b = find_parent (parent , b )
20+
21+ if a < b :
22+ parent [b ] = a
23+ else :
24+ parent [a ] = b
25+
26+
27+ v , e = map (int , input ().split ())
28+ parent = [0 ] * (v + 1 )
29+
30+ edges = []
31+ result = 0
32+
33+ for i in range (1 , v + 1 ):
34+ parent [i ] = i
35+
36+ for i in range (e ):
37+ a , b , cost = map (int , input ().split ())
38+ edges .append ((cost , a , b ))
39+
40+ edges .sort ()
41+ last = 0 # 최소 신장 트리 간선 중 가장 비용이 큰 간선
42+
43+ for edge in edges :
44+ cost , a , b = edge
45+ if find_parent (parent , a ) != find_parent (parent , b ):
46+ union_parent (parent , a , b )
47+ result += cost
48+ last = cost
49+
50+ print (result - last )
Original file line number Diff line number Diff line change 1+ """
2+ @file 10-4.py
3+ @brief 커리큘럼
4+ @desc 위상 알고리즘
5+
6+ 위상 알고리즘을 수행, 더 오랜 시간 걸리는 경우의 시간 값을 저장하는 방식으로 결과 테이블 갱신하여 출력
7+ """
8+ from collections import deque
9+ import copy
10+
11+
12+ v = int (input ())
13+ indegree = [0 ] * (v + 1 )
14+ graph = [[] for i in range (v + 1 )]
15+ time = [0 ] * (v + 1 )
16+
17+ for i in range (1 , v + 1 ):
18+ data = list (map (int , input ().split ()))
19+ time [i ] = data [0 ]
20+ for x in data [1 :- 1 ]:
21+ indegree [i ] += 1
22+ graph [x ].append (i )
23+
24+
25+ def topology_sort ():
26+ result = copy .deepcopy (time )
27+ q = deque ()
28+
29+ for i in range (1 , v + 1 ):
30+ if indegree [i ] == 0 :
31+ q .append (i )
32+
33+ while q :
34+ now = q .popleft ()
35+ for i in graph [now ]:
36+ result [i ] = max (result [i ], result [now ] + time [i ])
37+ indegree [i ] -= 1
38+
39+ if indegree [i ] == 0 :
40+ q .append (i )
41+
42+ for i in range (1 , v + 1 ):
43+ print (result [i ])
44+
45+
46+ topology_sort ()
You can’t perform that action at this time.
0 commit comments