塔子哥找的一个比较高质量的讲解贴。大家想彻底搞清楚的可以去看看!
https://blog.csdn.net/m0_63997099/article/details/140763017
给定一个整数n表示员工人数,以及一个n行的邻接表数组,描述员工之间的同学或同团队关系。要求将这n个人分成两组,使得每组内没有同学或同团队的员工。输出按编号从小到大排序的最优分组方案,如果无法分组,则输出−1。
公司组织绩效互评,为了避免有同学或者同团队的人互相打高分,需要将员工分成两组分别打分。给定一个整数n和一个数组GoodRelationShips[][],其中,n表示人数,数组GoodRelationShips[][]是一个邻接表,GoodRelationShips[i]的元素[a,b,c]代表员工i和员工a,b,c是同学或者同团队。
请将这n个人分成两组,使其每组不再有同学或者同团队的人。
GoodRelationShips[][]的长度范围为[1,100]。
GoodRelationShips[i]中的元素的范围为[1,GoodRelationShips.length−1]。
GoodRelationShips[i]不会包含i或者有重复的值。
图是无向的:如果j在GoodRelationShips[1]里边,那么i也会在 GoodRelationShips[j]里边。
保证给出的图是联通图
数组形式的员工关系邻接表,第一行数字代表有N个顶点,顶点编号从0开 始,后续接N行。第i行代表第i−1个顶点和他有关系的同学的顶点编号
分组方案按照节点编号从小到大排序,如两个方案第一个节点相同,则按照第二个节点排序,以此类推;方案内部也按照编号从小到大排序。输出排序最靠前的一种方案,如无法分成符合条件的两组,则输出−1
如输出如下两种方案时,选择第一种方案,因为方案一的分组2第一个节点编号更小:
分组1:1
分组2:2 3 4 5
和
分组1:1 2
分组2:3 4 5
如输出如下两种方案时,选择第二种方案,因为方案二的分组2第一个节点编号更小:
分组1:1 2
分组2:3 4 5
和
分组1:1 3
分组2:2 4 5
输入
4
1 3
0 2
1 3
0 2
输出
0 2
1 3
说明
无向图如下:
输入
4
1 2 3
0 2
0 1 3
0 2
输出
-1
说明
无向图如下: