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

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

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

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

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

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

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

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cctype>
#include<queue>
#define rg register
using namespace std;
inline int read(){
rg int s=0,f=0;
rg char ch=getchar();
while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
while(isdigit(ch)) s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
return f?-s:s;
}
int n,m,cnt=-1;
const int MAX=2000015;
int head[MAX];
bool vis[MAX],used[MAX];
int seq[MAX],label[MAX],color[MAX];
struct edge{
int nxt;
int to;
}e[MAX];
void add(int u,int v){
e[++cnt].nxt=head[u];
e[cnt].to=v;
head[u]=cnt;
}
typedef pair<int,int>p;
priority_queue<p>q;
void mcs(){
for(rg int i=1;i<=n;++i) q.push(p(0,i));
for(rg int i=n;i>=1;--i){
while(vis[q.top().second]) q.pop();
int u=q.top().second;
q.pop();
seq[i]=u;
vis[u]=1;
for(rg int i=head[u];~i;i=e[i].nxt){
if(!vis[e[i].to]) q.push(p(++label[e[i].to],e[i].to));
}
}
}
int solve(){
int res=0;
for(rg int i=n;i>=1;--i){
memset(used,0,sizeof(used));
for(rg int j=head[seq[i]];~j;j=e[j].nxt){
used[color[e[j].to]]=1;
}
for(color[seq[i]]=1;used[color[seq[i]]];++color[seq[i]]);
res=max(res,color[seq[i]]);
}
return res;
}
int main(){
memset(head,-1,sizeof(head));
n=read(),m=read();
for(rg int i=1;i<=m;++i){
int u=read(),v=read();
add(u,v);
add(v,u);
}
mcs();
printf("%d\n",solve());
return 0;
}

最新文章

  1. VMware三种上网模型
  2. 解决webstorm卡顿问题
  3. 了解学习JS中this的指向
  4. windows2003 DHCP中批处理绑定IP与MAC
  5. Windows 删除 .svn标志
  6. C++ STL初学笔记
  7. 快速反射DataTable
  8. CentOS6.5升级内核到3.10.28 --已验证
  9. java实现字符串反转(原作有点错误,需要看下评论)
  10. asp.net mvc 客户端(&amp;)中检测到有潜在危险的 Request.Path 值。
  11. Spring源代码解析 ---- 循环依赖
  12. T-SQL编程语句
  13. 标准会话对象——StandardSession
  14. c语言利用读取命令行(多行读取)
  15. Cent Linux启动tomcat慢的问题
  16. vue中修改了数据但视图无法更新的情况[转载]
  17. swift - 画图截取图片 - 保存相册
  18. java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String错误的解决方法
  19. 在EditText中添加QQ表情
  20. 如何大幅优化solr的查询性能(转)

热门文章

  1. Java JDBC的基础知识(二)
  2. SWT table性能改善 -- 使用VirtualTable
  3. 一个人的旅行(hdu2066)Dijkstra算法模版
  4. Retrofit 2.0 使用和原理
  5. Java三大特性:封装,继承,多态
  6. 服务注册中心Eureka vs Zookeeper vs Consul
  7. Three.js开发指南---粒子和粒子系统(第七章)
  8. 一起来看看JavaScript中==和===有何不同
  9. 关于latex编译中文不显示问题的解决方法。
  10. Asp Url汉字乱码的问题