package leetcode import ( "math" "github.com/halfrost/LeetCode-Go/template" ) func minMalwareSpread(graph [][]int, initial []int) int { if len(initial) == 0 { return 0 } uf, minIndex, count, countMap := template.UnionFind{}, 0, math.MinInt64, map[int]int{} uf.Init(len(graph)) for i := range graph { for j := range graph[i] { if i == j { break } if graph[i][j] == 1 { uf.Union(i, j) } } } for i := 0; i < len(graph); i++ { countMap[uf.Find(i)]++ } for _, v := range initial { tmp := countMap[uf.Find(v)] if count == tmp && minIndex > v { minIndex = v } if count < tmp { minIndex = v count = tmp } } return minIndex }