【CF549B】Looksery Party

来源:互联网 发布:开淘宝需要什么 编辑:程序博客网 时间:2024/05/01 11:54

题目大意

给出一幅无向图,每个点被选择后邻接的点以及它本身权值都加一,要求构造一种方案使得每一个点i最终的权值不等于给出的Ai,或输出无解。


算法分析

这道题咋一看无从下手,完全没有头绪。

最主要是没有考虑到根本不可能无解。

考虑下面这种构造方式

  • 若图中每个点Ai都不为0,那么所有人都不选就可以满足要求了。
  • 若存在一个点Ai为0,那么将它选上,并将其临接的所有点Ai都减一,重复这两个步骤。

为什么存在0点时需要选它本身而不是选择邻接的点呢?

由于Ai的可能取值有n+1种,但是只有n个点,也就是说总有一种情况是取不到的。
因为当且仅当某个点的Ai为0时算法才需要继续,而某点的Ai为0时我们总能把它本身选上来消除这个点,因此这个问题总是有解的,而且通过以上算法必定能构造一个解。


反思

CF上有很多很多题都是无从入手的,而且这些题很大一部分上都用到了很精妙的构造。所以当常规算法无法满足这道题目的要求时,尝试一下构造一个解吧。

0 0