A. [2021.2.16多校省选模拟18]无向图
给定一张无向连通图,要求删除边使得奇度数点数量最大,输出字典序最大的一组解。
首先发现删除图上一条链的作用就是使得两端点奇偶性变化,中间点不变,然后我们只需要处理图上偶度数点即可,考虑使用若干条链将它们连接,因为异或的性质可以发现一个类似反悔贪心的性质,每条边选不选只和被覆盖次数奇偶性有关,所以只要图联通一定就有解。然后考虑字典序的限制,考虑贪心,每次考虑编号最小的边,每次删边,如果图仍然联通那么就可以删去,删边不好处理我们考虑加边,可以按照编号从大到小加边,形成一个最大生成树。
然后如果此时只有偶数个偶度数点那么发现解是一定的,因为每条边两边要么都是偶数个,要么都是奇数个,如果是奇数个这条边一定被覆盖奇数次,否则一定覆盖偶数次。
因为一个图的度数总和是偶数,所以奇度数点一定有偶数个,所以如果原图有奇数个点,那么就一定有奇数个偶度数点,所以我们需要考虑舍弃一个点,仍然考虑贪心,找到生成树上编号最小的边,然后将其保留,树被分成奇偶两部分,对于偶这一部分可以直接求解答案,奇这部分继续求解。
有两个问题,一个是快速找到那一边是奇树,一个是快速找到编号最小的边。
第一个问题考虑在切树的过程中,由于每次都是删去一个偶树,所以这个奇树的方向是不变的,所以我们只需要一开始预处理每一条边的方向即可。
第二个问题考虑我们每次这个编号是单调递增的,所以我们只需要排序之后依次处理,遇到不合法的边跳过就好了。