传送门:点击打开链接
题意:有n个人,每个人都有学历。然后m个关系,每个关系有u和v,表示u和v是朋友
现在要求,如果是u和v是朋友,那么学历高的人的工资就必须比学历低的人的工资高
如果u和v都是x的朋友,那么对于u和v,那么学历高的人的工资就必须比学历低的人的工资高
说白了就是,通过1条边或者2条边相连的点之间,学历高的工资要更高
问这样去安排工资,那么总工资最低是多少。
思路:因为最多关系中只会相差2条边,所以我们当然会去考虑dp
对于每个节点u,我们去维护Max1和Max2。表示u节点的周围学历比u的学历要低的点中,工资最大值和次大值。
还要顺便维护一个nam,表示工资最大的那个的学历是多少。
首先,我们读入人的学历,按学历从小到大排序,然后从小到大考虑人的工资。
对于点u,假如v是u的相邻节点,那么u的工资会等于max(Max1[v],Max1[u])+1
但是这样写还是不够的,因为如果它周围的最大工资的那个人,实际上学历和它是一样的,那么没必要+1
所以这里我们才维护了次大值,当取最大值的那个nam等于u的工资时,那么我们就只需要用次大值工资去更新了,这样答案会更优。
在计算完u的答案之后,我们还要遍历一遍v,维护下v的Max1和Max2
最后把所