当前位置: 代码迷 >> 综合 >> 图型dp csu1700 Black Company
  详细解决方案

图型dp csu1700 Black Company

热度:74   发布时间:2023-12-14 03:21:39.0

传送门:点击打开链接

题意:有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

最后把所

  相关解决方案