【题意分析】

  给你一张弦图,求图的最小染色数。

【解题思路】

  这篇讲稿已经讲得很详尽了。。

  直接求完美消除序列,然后倒着染色即可。复杂度O(n2+nm)。

【参考程序】

  求完美消除序列我是用的MCS(lexBFS都不会怎么办啊QAQ)。

 #include <cctype>
#include <cstdio>
#define REP(I,start,end) for(int I=(start);I<=(end);I++)
#define PER(I,start,end) for(int I=(start);I>=(end);I--)
inline int space()
{
return putchar(' ');
}
inline int enter()
{
return putchar('\n');
}
inline int getint()
{
char ch=getchar();
for(;!isdigit(ch)&&ch!='+'&&ch!='-';ch=getchar());
bool impositive=ch=='-';
if(impositive)
ch=getchar();
int result=;
for(;isdigit(ch);ch=getchar())
result=(result<<)+(result<<)+ch-'';
return impositive?-result:result;
}
template<typename integer> inline int write(integer n)
{
integer now=n;
bool impositive=now<;
if(impositive)
{
putchar('-');
now=-now;
}
char sav[];
sav[]=now%+'';
int result=;
for(;now/=;sav[result++]=now%+'');
PER(i,result-,)
putchar(sav[i]);
return result+impositive;
}
template<typename T> inline bool getmax(T &target,T pattern)
{
return pattern>target?target=pattern,true:false;
}
template<typename T> inline bool getmin(T &target,T pattern)
{
return pattern<target?target=pattern,true:false;
}
//=====================Header Template=====================
#pragma optimize(2)
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
typedef vector<int> vecint;
typedef vecint::iterator vecnode;
bool used[];
int q[],label[],color[];
vecint edge[],rec[];
int main()
{
int n=getint();
memset(edge,,sizeof(edge));
for(int m=getint();m--;)
{
int u=getint(),v=getint();
edge[u].push_back(v);
edge[v].push_back(u);
}
REP(i,,n)
sort(edge[i].begin(),edge[i].end());
memset(used,,sizeof(used));
memset(label,,sizeof(label));
memset(rec,,sizeof(rec));
int best=label[]=;
REP(i,,n)
rec[].push_back(i);
REP(i,,n)
{
for(;;best-=rec[best].empty())
{
for(;!rec[best].empty()&&used[rec[best].back()];rec[best].pop_back());
if(!rec[best].empty())
{
used[q[i]=rec[best].back()]=true;
break;
}
}
int now=q[i];
for(vecnode it=edge[now].begin();it!=edge[now].end();it++)
{
int p=*it,pv=++label[p];
rec[pv].push_back(p);
getmax(best,pv);
}
}
memset(color,,sizeof(color));
int ans=;
REP(i,,n)
{
int now=q[i];
memset(used,,sizeof(used));
for(vecnode it=edge[now].begin();it!=edge[now].end();it++)
used[color[*it]]=true;
REP(j,,n)
if(!used[j])
{
color[now]=j;
getmax(ans,j);
break;
}
}
write(ans);
enter();
return ;
}

最新文章

  1. C语言操作文件
  2. log4net日志功能使用
  3. 用PHP生成随机数的函数(代码示例)
  4. iOS UIView 基本属性用法
  5. 《深入理解linux内核》第一章 序论
  6. linux动态库加载RPATH, RUNPATH
  7. (转)iOS项目的目录结构和开发流程
  8. jQuery获取checkbox选中项等操作及注意事项
  9. [转]new一个Object对象占用多少内存?
  10. html select 标签设置默认选中
  11. 关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案
  12. Excel自动换行、Export2Excel 自动换行
  13. Redis和memcached缓存技术
  14. sql server 安装时提示要重启
  15. 【转】修复关于apache-xampp的问题:Port 443 in use by “vmware-hostd.exe”!
  16. Java时间类(转)
  17. C# 获取所有对象的字符串表示一ToString方法
  18. [python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写
  19. ABP实战--分页排序
  20. springboot的相关信息

热门文章

  1. visual studio 自定义警告标签
  2. 转帖 使用eclipse创建之前没有创建的web.xml
  3. 基础课(三)实验串入OSPF协议和HSRP协议以及HSRP外部链路跟踪
  4. [bzoj3033]太鼓达人 题解(搜索)
  5. Robotframework之下拉列表select
  6. 带头结点的循环单链表----------C语言
  7. 杂项:SVN -u
  8. 11、jQueryEasyUI的基本组件
  9. vue2.0使用基础
  10. Nginx学习——简介及常用命令