之前说顺着打BZOJ结果又被自己给鸽了qwq。

————————————————————————————————————

言归正传这道题应该怎么做。

先给大家普及一下弦图(连接环上俩个不相邻节点的边称为弦)和mcs算法(最小染色数=最大完全子图)的概念(会的可以直接跳代码)。

没错这题就是弦图最小涂色,直接一遍mcs就搞定了(仿佛没说一样。

将弦图分成多组的问题可以看做给弦图上的点染色且两个有直接边相连的点不能同色,这样就转化成了弦图的最小染色问题。

优先队列可以实现O(nlogn+m)的复杂度,其实还是很慢,我做这个题好几次T(真悲伤。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include<cmath>
  7. #include<cctype>
  8. #include<queue>
  9. #define rg register
  10. using namespace std;
  11. inline int read(){
  12. rg int s=0,f=0;
  13. rg char ch=getchar();
  14. while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
  15. while(isdigit(ch)) s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
  16. return f?-s:s;
  17. }
  18. int n,m,cnt=-1;
  19. const int MAX=2000015;
  20. int head[MAX];
  21. bool vis[MAX],used[MAX];
  22. int seq[MAX],label[MAX],color[MAX];
  23. struct edge{
  24. int nxt;
  25. int to;
  26. }e[MAX];
  27. void add(int u,int v){
  28. e[++cnt].nxt=head[u];
  29. e[cnt].to=v;
  30. head[u]=cnt;
  31. }
  32. typedef pair<int,int>p;
  33. priority_queue<p>q;
  34. void mcs(){
  35. for(rg int i=1;i<=n;++i) q.push(p(0,i));
  36. for(rg int i=n;i>=1;--i){
  37. while(vis[q.top().second]) q.pop();
  38. int u=q.top().second;
  39. q.pop();
  40. seq[i]=u;
  41. vis[u]=1;
  42. for(rg int i=head[u];~i;i=e[i].nxt){
  43. if(!vis[e[i].to]) q.push(p(++label[e[i].to],e[i].to));
  44. }
  45. }
  46. }
  47. int solve(){
  48. int res=0;
  49. for(rg int i=n;i>=1;--i){
  50. memset(used,0,sizeof(used));
  51. for(rg int j=head[seq[i]];~j;j=e[j].nxt){
  52. used[color[e[j].to]]=1;
  53. }
  54. for(color[seq[i]]=1;used[color[seq[i]]];++color[seq[i]]);
  55. res=max(res,color[seq[i]]);
  56. }
  57. return res;
  58. }
  59. int main(){
  60. memset(head,-1,sizeof(head));
  61. n=read(),m=read();
  62. for(rg int i=1;i<=m;++i){
  63. int u=read(),v=read();
  64. add(u,v);
  65. add(v,u);
  66. }
  67. mcs();
  68. printf("%d\n",solve());
  69. return 0;
  70. }

【题解】[HNOI2008]神奇的国度—BZOJ1006。的更多相关文章

  1. 【bzoj1006】[HNOI2008]神奇的国度

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3114  Solved: 1401[Submit][Sta ...

  2. bzoj1006 [HNOI2008]神奇的国度

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2304  Solved: 1043 Description ...

  3. bzoj 1006 [HNOI2008]神奇的国度 弦图+完美消除序列+最大势算法

    [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4370  Solved: 2041[Submit][Status][D ...

  4. BZOJ 1006 [HNOI2008] 神奇的国度(简单弦图的染色)

    题目大意 K 国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即 AB 相互认识,BC 相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K 国禁止四边关系,五边关系等 ...

  5. 【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题

    1006: [HNOI2008]神奇的国度 Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则. 他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的 ...

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

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1788  Solved: 775[Submit][Stat ...

  7. BZOJ 1006: [HNOI2008]神奇的国度( MCS )

    弦图最小染色...先用MCS求出完美消除序列然后再暴力染色... ------------------------------------------------------------------- ...

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

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MB Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角 ...

  9. BZOJ 1006 [HNOI2008]神奇的国度==最大势算法

    神奇的国度 K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在. ...

随机推荐

  1. 乐字节-Java8新特性之方法引用

    上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...

  2. Redis简介及应用场景

    一丶Redis介绍 Redis是一个开源的 key—value型 单线程 数据库,支持string.list.set.zset和hash类型数据. 默认端口:6379 默认数据库数量:16 二.优点: ...

  3. 理解Java线程

    使用多线程的目的是更好的利用cpu资源,大部分多线程代码都可以用单线程来实现,但也有无法用单线程实现的,如:生产者消费者模型 下面对一些常用的概念进行区分: 多线程:指的是这个程序(一个进程)运行时产 ...

  4. php魔术方法__tostring的应用

    当echo一个对象的时候,会报错误 Object of class Person could not be converted to string 我们可以通过魔术方法__tostring()  把对 ...

  5. HDU1260(KB12-H DP)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  6. 如何用JS获取页面上的所有标签

    最近忙的一匹,忙着大保健,都来不及写博客,今天特意抽出点时间来写一写 前两天看到一个题,是问如何从页面上获取所有的标签的并查看他们的数量,感觉还是有点意思的,所以给大家来搞一下子 我们先来捋捋思路,那 ...

  7. iframe页面刷新问题

    1.问题:当iframe的页面加载过再关闭之后,如果iframe的src没有发生变化,js不会重新加载,再次打开页面不会刷新: 2.解决方法:关闭页面时清空src,再次打开时即可重新加载最新数据. $ ...

  8. kvm 创建新虚拟机命virt-install 使用说明

    virt-install 命令说明 1.命令作用      建立(provision)新虚拟机   2.语法   virt-install [选项]... 3.说明(DESCRIPTION)   vi ...

  9. OSGI企业应用开发(八)整合Spring和Mybatis框架(一)

    到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节.本篇文章开始,我们將My ...

  10. 自定义适用于手机和平板电脑的 Dynamics 365(二):窗体自定义项

    适用于手机的 Dynamics 365 和 适用于平板电脑的 Dynamics 365 使用窗体作为 Web 应用. 窗体在应用程序中的显示方式为移动体验进行了优化. 下图显示了从 Web 应用程序到 ...