题目描述
服务器连接方式包括直接相连,间接相连。A和B直接连接,B和C直接连接,则A和C间接连接。直接连接和间接连接都可以发送广播。
给出一个 N * N 数组,代表N个服务器,
matrix[i][j] = 1,则代表 i 和 j 直接连接;不等于1时,代表 i 和 j 不直接连接。
matrix[i][i] = 1, 即自己和自己直接连接。
matrix[i][j] = matrix[j][i]。
计算初始需要给几台服务器广播,才可以使每个服务器都收到广播。
输入描述
输入为N行,每行有N个数字,为0或1,由空格分隔,构成N*N的数组,N的范围为 1 <= N <= 40
输出描述
输出一个数字,为需要广播的服务器的数量
例1
输入
1 0 0
0 1 0
0 0 1
输出
3
说明
3台服务器互不连接,所以需要分别广播这3台服务器
例2
输入
1 1
1 1
输出
1
说明
2台服务器互相连接,所以只需要广播其中一台服务器
题解
考察并查集
根据题意,最多使用N台服务,对角线外面的点,作为一个连接点,连接两个对角线上的服务器,如
[1, 0, 1]
[0, 1, 0]
[0, 0, 1]
(0,2) 连接了(0,0)和(2,2),(0,2)和(0,0)和(2,2)就在一个集合里,(1,1)单独作为一个集合,一个集合只需要1台服务器就可以广播集合里全部服务器。
Python 代码实现