[BZOJ1006] [HNOI2008] 神奇的国度 (弦图)

Description

  K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA
相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2
...An之间仅存在N对认识关系:(A1A2)(A2A3)...(AnA1),而没有其它认识关系.比如四边关系指ABCD四个人 AB,BC,C
D,DA相互认识,而AC,BD不认识.全民比赛时,为了防止做弊,规定任意一对相互认识的人不得在一队,国王相知道,
最少可以分多少支队。

Input

  第一行两个整数N,M。1<=N<=10000,1<=M<=1000000.表示有N个人,M对认识关系. 接下来M行每行输入一对朋

Output

  输出一个整数,最少可以分多少队

Sample Input

4 5
1 2
1 4
2 4
2 3
3 4

Sample Output

3

HINT

  一种方案(1,3)(2)(4)

Source

Solution

  cdq《弦图与区间图》论文题

  题意保证图为弦图,然后本题又是求最小染色,于是用$MCS$算法求一个完美消除序列,倒着贪心即可,论文里有说明

  原论文里使用了桶排序使得其为$O(n+m)$,蒟蒻智商余额不足表示看不懂,于是用的优先队列,大概是$O((n+m)log(n+m))$

  (咦好多人都是$O(n^2+m)$的?啊不怕不怕啦!)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct edge
 4 {
 5     int v, nxt;
 6 }e[2000005];
 7 int fst[10005], label[10005], s[10005], vis[10005];
 8 priority_queue<pair<int, int> > PQ;
 9
10 void addedge(int i, int u, int v)
11 {
12     e[i] = (edge){v, fst[u]}, fst[u] = i;
13 }
14
15 int main()
16 {
17     int n, m, u, v, ans = 0;
18     scanf("%d%d", &n, &m);
19     for(int i = 1; i <= m; ++i)
20     {
21         scanf("%d%d", &u, &v);
22         addedge(i << 1, u, v);
23         addedge(i << 1 | 1, v, u);
24     }
25     for(int i = 1; i <= n; ++i)
26         PQ.push(make_pair(0, i));
27     for(int i = n; i; --i)
28     {
29         u = PQ.top().second, PQ.pop();
30         while(vis[u])
31             u = PQ.top().second, PQ.pop();
32         s[i] = u, vis[u] = -1;
33         for(int j = fst[u]; j; j = e[j].nxt)
34         {
35             v = e[j].v;
36             if(vis[v]) continue;
37             PQ.push(make_pair(++label[v], v));
38         }
39     }
40     memset(label, 0, sizeof(label));
41     for(int i = n; i; --i)
42     {
43         for(int j = fst[s[i]]; j; j = e[j].nxt)
44             vis[label[e[j].v]] = i;
45         for(int j = 1; ; ++j)
46             if(vis[j] != i)
47             {
48                 label[s[i]] = j, ans = max(ans, j);
49                 break;
50             }
51     }
52     printf("%d\n", ans);
53     return 0;
54 }

时间: 2024-12-17 13:41:16

[BZOJ1006] [HNOI2008] 神奇的国度 (弦图)的相关文章

bzoj 1006: [HNOI2008]神奇的国度 弦图的染色问题&amp;&amp;弦图的完美消除序列

1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1788  Solved: 775[Submit][Status] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2...An之间仅存在N对认识关系:(A1A2)

BZOJ 1006: [HNOI2008]神奇的国度 弦图的最小染色问题

弦图的最小染色问题: 先求出完美消除序列,然后从后往前贪心染色 1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 2245  Solved: 1006 [Submit][Status][Discuss] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等

bzoj 1006: [HNOI2008]神奇的国度 -- 弦图(最大势算法)

1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MB Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2...An之间仅存在N对认识关系:(A1A2)(A2A3)...(AnA1),而没有其它认识关系.比如四边关系指ABCD四个人

BZOJ 1006 HNOI2008 神奇的国度 弦图最小染色 MCS算法

题目大意:给定一个弦图,求最小染色 弦图相关问题,具体见陈丹琦09年讲稿<弦图与区间图> PPT里有一个问题没说清楚 就是MCS算法的O(m+n)怎么来的 那个在 http://tieba.baidu.com/p/2891159900 有jcvb神犇详细的解答 至于染色如何标号,时间戳标记暴力硬扫即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

BZOJ 1006 HNOI2008 奇妙的国度 弦图最小染色 MCS算法

题目大意:给定一个弦图,求最小染色 弦图相关问题,详细见陈丹琦09年讲稿<弦图与区间图> PPT里有一个问题没说清楚 就是MCS算法的O(m+n)怎么来的 那个在 http://tieba.baidu.com/p/2891159900 有jcvb神犇具体的解答 至于染色怎样标号,时间戳标记暴力硬扫就可以 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

BZOJ1006: [HNOI2008]神奇的国度

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1006 题解:这题应该是留的最久的一个坑了吧...今天终于A掉了...但还是没有完全理解的感觉. 代码: 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostrea

【BZOJ1006】神奇的国度(弦图)

[BZOJ1006]神奇的国度(弦图) 题面 BZOJ 题解 直接参考弦图的做法 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map> #include<vector> #includ

【bzoj1006】[HNOI2008]神奇的国度

1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3114  Solved: 1401[Submit][Status][Discuss] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2...An之间仅存在N对认

[HNOI2008]神奇的国度

1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2...An之间仅存在N对认识关系:(A1A2)(A2A3)...(AnA1),