博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ 1006][HNOI2008]神奇的国度(MCS弦图的染色)
阅读量:6148 次
发布时间:2019-06-21

本文共 1454 字,大约阅读时间需要 4 分钟。

Description

K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA

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

 

Solution

依旧要放CDQ的论文链接

嗯这题是弦图的染色问题·裸

弦图的染色 (用最少的颜色给所有点染色使得相邻点颜色不同)

完美消除序列从后往前给每个点染上能染的最小颜色

最大独立集(最大的点的子集使得任意两个点不相邻)

完美消除序列从前往后能选则选

#include
#include
#include
#include
using namespace std;int n,m,ans=0;int col[10005],check[10005],label[10005],num[10005],head[10005],cnt=0;bool vis[10005];struct Node{ int next,to;}Edges[2000005];void addedge(int u,int v){ Edges[++cnt].next=head[u]; head[u]=cnt; Edges[cnt].to=v;}int read(){ int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){ if(c=='-')f=-1;c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0';c=getchar(); } return x*f;}void work(){ for(int i=n;i>0;i--) { int u=0; for(int j=1;j<=n;j++) if(!vis[j]&&(!u||label[j]>label[u]))u=j; vis[u]=1;num[i]=u; for(int i=head[u];~i;i=Edges[i].next) label[Edges[i].to]++; } for(int i=n;i>0;i--) { for(int j=head[num[i]];~j;j=Edges[j].next) check[col[Edges[j].to]]=i; int t=1; while(check[t]==i)t++; col[num[i]]=t; if(ans

 

转载于:https://www.cnblogs.com/Zars19/p/6629627.html

你可能感兴趣的文章
我的友情链接
查看>>
android开源项目框架大全:《IT蓝豹》
查看>>
数据库 : 事物以及隔离性导致的问题
查看>>
Jquery乱码终极解决方案
查看>>
Android Fragment 真正的完全解析(上) (转载)
查看>>
多线程依次打印abcabc
查看>>
一:学习Linux前准备工作
查看>>
how to install wireless driver for Dell 630 in Ubuntu
查看>>
Kafka 配置参数汇总及相关说明
查看>>
弄清 CSS3 的 transition 和 animation
查看>>
服务器指定网卡进行备份数据避免影响业务口
查看>>
在Sublime Text 2下面开发Sass
查看>>
四则运算个人项目3
查看>>
eclipse 构建maven web工程
查看>>
237. Delete Node in a Linked List
查看>>
angular2-动画
查看>>
基于mykernel的时间片轮转调度
查看>>
jquery中的全局事件
查看>>
libgdx 3D CameraInputController WASD控制器
查看>>
CF1080
查看>>