这回没看黄学长的代码,看的是chty的

原题:

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

1<=N<=10000,1<=M<=1000000

恩…建议先看一下cdq的《弦图与区间图》,你只要把内个东西看懂了这题就差不多了

首先这个图一定是弦图,题目中说的关系的性质就可以看成是弦图的定义

然后使用mcs求完美消除序列,这个可以在《弦图与区间图》中学习

然后根据消除序列从后往前染色即可

首先有一个非常严重的问题,团数并不是团的个数,而是最大团的节点的个数!!!

这个是NOIP吧里的证明:

首先团数<=色数 应该可以吧...
因为最大团的点必然每一个点的颜色不同...
接下来由于最大势算法求出的 那个 完美消除序列的每一个点都满足它与它后面的相连的点构成一个团,由于这个性质,考虑 节点 i 的时候 ,i后面与它相连的点都必然 是相互连接的, 也就是说 i 后面与它相连的点也是一个团。
考虑那个染色算法...我们染到第i个点的时候,由于上面的性质,与i相连的点必然相互染的是不同的颜色,所以我们考虑色数实际上就是考虑每一个点与它的相连的点构成的团的最大团数即可,所以 团数>=色数。
所以 团数=色数

勉强能理解吧……然后染色的时候从1开始枚举颜色,直到第i个颜色没有被周围的任何一个节点染色,这个节点的颜色就是i,然后维护最大的i,就是团数

这里有个小技巧,可以通过判断flag[color[e[j].y]]=i来判断i个颜色有没有被周围的任何一个节点染色,这样就不用memset了

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
struct ddd{int next,y;}e[];int LINK[],ltop=;
inline void insert(int x,int y){e[++ltop].next=LINK[x];LINK[x]=ltop;e[ltop].y=y;}
int n,m;
int label[];
bool visited[];
int peo[];
int color[];
int flag[];
int ans=;
void mcs(){
for(int i=n;i;i--){
int now=;
for(int j=;j<=n;j++)//注意这个label最大的点并不是和i相邻的点,而是全局点
if(label[j]>=label[now] && !visited[j]) now=j;//这个循环一搞不就变成n^2的了???
visited[now]=true;
peo[i]=now;
for(int j=LINK[now];j;j=e[j].next)
label[e[j].y]++;
}
}
void get_color(){
for(int i=n;i;i--){
int now=peo[i];
for(int j=LINK[now];j;j=e[j].next) flag[color[e[j].y]]=i;//标记成i的话就不用memset了
int _color=;
while(flag[_color]==i) _color++;
color[now]=_color;
ans=max(ans,_color);
}
}
int main(){//freopen("ddd.in","r",stdin);
memset(visited,,sizeof(visited));
cin>>n>>m;
int _left,_right;
while(m --> ){
_left=read(),_right=read();
insert(_left,_right),insert(_right,_left);
}
mcs();
get_color();
cout<<ans<<endl;
return ;
}

【BZOJ1006】【HNOI2008】神奇的国度的更多相关文章

  1. bzoj1006 [HNOI2008]神奇的国度

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

  2. [bzoj1006](HNOI2008)神奇的国度(弦图最小染色)【太难不会】

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

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

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

  4. BZOJ1006:[HNOI2008]神奇的国度(弦图染色)

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

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

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

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

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

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

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

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

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

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

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

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

    [BZOJ1006]神奇的国度(弦图) 题面 BZOJ 题解 直接参考弦图的做法 #include<iostream> #include<cstdio> #include< ...

随机推荐

  1. TrueType, OpenType, PCL和PostScript字体版本nterleaved 2 of 5 Barcode Font Advantage Package

    Interleaved 2 of 5 Barcode Font Advantage Package包含了TrueType, OpenType, PCL和PostScript字体版本. 提供了超过30个 ...

  2. 黑客界大拿tombkeeper文章:怎么学好技术成为技术大拿(题目我自拟的)

    这两天论坛上又有人开始抱怨世风日下,大家都现实了,都不开放了,不交流了.对这种“月经贴”,我基本上已经习惯了,不过因为吃了粉皮炖鸡,心情比较好,于是就说了两句. 三四年前,当时我对人性的看法还不像现在 ...

  3. MySQL数据类型(四)

    一.数据类型 二.整型类型 tinyInt: 1个字节:-128-127(有符号) 是否有符号,可以定义时,使用unsign标识,表示无符号的,不写表示有符号的 Create table studen ...

  4. 转:115个Java面试题和答案——终极列表(上)

    转自:http://www.importnew.com/10980.html 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的 ...

  5. jQuery 关于 end() 方法的详细解释

    <ul class="first"> <li class="foo">list item 1</li> <li> ...

  6. fwrite错误

    使用fwrite出错 f:\dd\vctools\crt_bld\self_x86\crt\srt\write.cline:69expression:_osfile(fh)&FOPEN 使用w ...

  7. SQL优化-索引

    (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonc ...

  8. catch的执行与try的匹配

    这里有一段代码: public class EmbededFinally { public static void main(String args[]) { int result; try { Sy ...

  9. String to Integer (atoi) ---- LeetCode 008

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  10. Objects and Data Structures

    Date Abstraction Hiding implementation is not just a matter of putting a layer of fucntions between ...