11let nm = readLine ( ) !. split { $0 == " " } . map { Int ( String ( $0) ) ! } ,
22 n = nm [ 0 ] ,
33 m = nm [ 1 ]
4- var knowPeepList = readLine ( ) !. split { $0 == " " } . dropFirst ( ) . map { Int ( String ( $0) ) ! }
5- let partyList = ( 0 ..< m) . map { _ in readLine ( ) !. split { $0 == " " } . dropFirst ( ) . map { Int ( String ( $0) ) ! } }
6- var parentInfo = [ Int] ( repeating: 0 , count: n+ 1 )
74
8- ( 1 ... n ) . forEach { parentInfo [ $0 ] = $0 }
5+ let knowPeeps = readLine ( ) ! . split { $0 == " " } . map { Int ( String ( $0 ) ) ! }
96
10- var answer = 0
11- func find( _ v: Int ) -> Int {
12- //0의 부모는 0이여서 및 조건문을 만족하지 않아 0을 반환함
13- if parentInfo [ v] != v {
14- parentInfo [ v] = find ( parentInfo [ v] )
7+ var parent = Array ( 0 ... n)
8+ var parties = [ [ Int] ] ( )
9+ var answer = m
10+
11+ if knowPeeps [ 0 ] != 0 {
12+ for i in 1 ..< ( knowPeeps. count- 1 ) {
13+ union ( knowPeeps [ i] , knowPeeps [ i+ 1 ] )
1514 }
16- return parentInfo [ v]
17- }
1815
19- func union( _ v: Int , _ g: Int ) {
20- let v = find ( v)
21- let g = find ( g)
22- if v < g {
23- parentInfo [ g] = v
24- } else {
25- parentInfo [ v] = g
16+ for _ in 0 ..< m {
17+ parties. append ( readLine ( ) !. split { $0 == " " } . map { Int ( String ( $0) ) ! } )
2618 }
27- }
2819
29- knowPeepList. forEach { parentInfo [ $0] = 0 }
20+ for i in 0 ..< m {
21+ for j in 1 ..< parties [ i] . count- 1 {
22+ union ( parties [ i] [ j] , parties [ i] [ j+ 1 ] )
23+ }
24+ }
3025
31- for i in partyList. indices {
32- for j in stride ( from: 0 , to: partyList [ i] . count- 1 , by: 1 ) {
33- union ( partyList [ i] [ j] , partyList [ i] [ j+ 1 ] )
26+ for i in 0 ..< m {
27+ if find ( parties [ i] [ 1 ] ) == find ( knowPeeps [ 1 ] ) {
28+ answer -= 1
29+ }
3430 }
3531}
3632
37- for i in partyList. indices {
38- if let first = partyList [ i] . first {
39- let parent = find ( first)
40- guard parent != 0 else { continue }
41- answer += 1
42- }
33+ print ( answer)
34+
35+ func find( _ g: Int ) -> Int {
36+ if parent [ g] == g { return g }
37+ parent [ g] = find ( parent [ g] )
38+
39+ return parent [ g]
4340}
4441
45- print ( answer)
42+ func union( _ g: Int , _ v: Int ) {
43+ var parentG = find ( g)
44+ var parentV = find ( v)
45+
46+ if parentV > parentG {
47+ swap ( & parentG, & parentV)
48+ }
49+ parent [ parentG] = parentV
50+ }
0 commit comments