|
| 1 | +classSolution { |
| 2 | +funfindAllPeople(n:Int,meetings:Array<IntArray>,firstPerson:Int):List<Int> { |
| 3 | +val secrets=mutableSetOf(0, firstPerson) |
| 4 | +val timeMap= mutableMapOf<Int,MutableMap<Int,MutableList<Int>>>() |
| 5 | + |
| 6 | +for ((src, dst, t)in meetings) { |
| 7 | +if (t!in timeMap) |
| 8 | + timeMap[t]=mutableMapOf() |
| 9 | + timeMap[t]!!.getOrPut(src) {mutableListOf() }.apply { add(dst) } |
| 10 | + timeMap[t]!!.getOrPut(dst) {mutableListOf() }.apply { add(src) } |
| 11 | + } |
| 12 | + |
| 13 | +fundfs( |
| 14 | +src:Int, |
| 15 | +adj:MutableMap<Int,MutableList<Int>>, |
| 16 | +visit:MutableSet<Int> |
| 17 | + ) { |
| 18 | +if (srcin visit)return |
| 19 | + visit.add(src) |
| 20 | + secrets.add(src) |
| 21 | + adj[src]?.forEach { nei-> |
| 22 | + dfs(nei, adj, visit) |
| 23 | + } |
| 24 | + } |
| 25 | + |
| 26 | + timeMap.keys.sorted().forEach { t-> |
| 27 | +val visit= mutableSetOf<Int> () |
| 28 | + timeMap[t]?.keys?.forEach { src-> |
| 29 | +if (srcin secrets) { |
| 30 | + dfs(src, timeMap[t]!!, visit) |
| 31 | + } |
| 32 | + } |
| 33 | + } |
| 34 | + |
| 35 | +return secrets.toList() |
| 36 | + } |
| 37 | +} |