[NOI 2008]假面舞会(综合图论)

来源:互联网 发布:伊利网络测评怎么算过 编辑:程序博客网 时间:2024/04/30 02:37

【题目大意】:

一共有n个人,每个人都带着面具,然后一共有k类面具,并且知道k>=3。只有带第i-1类面具的人能看到带第i类面具的人,带第k类面具的人能看到带第1类面具的人。告诉你m个信息,谁能看到谁。问你k的最大值和最小值。

【题目分析】:

作为练习考的NOI 2008 day1,据说是最简单的一个题……花了我三个小时想、写还有调……绝对IMBA~~

这个题变态就变态在如果一个人能看到两个人,那么这两个人就必须带同一类面具,或是两个人能看到同一个人,那么这两个人也一定带同一类面具。这样就让找等价类变得很麻烦了。

那么我们就从简单的分析起,如果不存在上述情况,也就是一个人就是一个等价类,那么这个图就是环和树。对于环,能让它满足的k就是这个环的长度和它的所有约数。如果是树的话,任意长度都好,所以有环就不用考虑树~

那么就是找环就好,所有环的长度的最大公约数就是最大的解,然后枚举3到这个gcd,就能得到最小的。如果都是树,那么最小就是3,最大就是所有的树上最长链的长度加在一起。

现在回到原来的问题,等价类怎么办~最开始想过并查集,但是发现特别容易悲剧,所以后来想到了改成无向图,正边和反边的权值分别为1和-1,这样找环的时候,如果找回来就没事了,说明与之前的并不矛盾,找到了矛盾(就是找到标号不同了),就是一个这个图的等价图的一个环。这就简单多了,于是这个问题就解决了……

P.s. 因为考了太多的东西,也不好分类,只好写了个图论综合~orz NOI 2008的这题的出题人……

【代码】:

原创粉丝点击