¡ǝɯoɔlǝʍ puɐ ollǝɥ
对于第一问,用并查集将所有边权为 \(0\) 的边的端点合并,
然后对于每个 type 看里面是否所有的点都在一个集合中即可。
时间复杂度 \(O(n \log n)\)(默认使用路径压缩并查集)。
对于第二问,将 type 看作点,
对于每两个 type 取它们中两个点的最小边权连边,
然后跑 floyd 即可,时间复杂度 \(O(k^3)\)。