【最小染色】【HNOI 2008】【bzoj 1006】神奇的国度

1006: [HNOI2008]神奇的国度

Time Limit: 20 Sec  Memory Limit: 162 MB
Submit: 2446  Solved: 1101

Description

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

Input

第一行两个整数N,M。1<=N<=10000,1<=M<=1000000.表示有N个人,M对认识关系. 接下来M行每行输入一对朋友

Output

输出一个整数,最少可以分多少队

Sample Input

4 5
1 2
1 4
2 4
2 3
3 4

Sample Output

3

HINT

一种方案(1,3)(2)(4)

题解:

论文题。详见——>CDQ弦图与区间图

Code:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 10010
#define M 1000100

struct Edge{
    int v,next;
}edge[M<<1];
int n,m,s,num=0,head[N],b[N],c[N],d[N],q[M];
bool vis[N]={0};

int in(){
    int x=0; char ch=getchar();
    while (ch<‘0‘ || ch>‘9‘) ch=getchar();
    while (ch>=‘0‘ && ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar();
    return x;
}

void add(int u,int v){
    edge[++num].v=v; edge[num].next=head[u]; head[u]=num;
}

int main(){
    n=in(),m=in(); s=0;
    for (int i=1; i<=m; i++){
        int u=in(),v=in();
        add(u,v),add(v,u);
    }

    memset(vis,0,sizeof(vis));
    memset(d,0,sizeof(d));
    for (int i=n; i; i--){
        int k=0;
        for (int j=1; j<=n; j++)
            if (!vis[j] && d[j]>=d[k]) k=j;
        vis[k]=true; q[i]=k;
        for (int j=head[k]; j; j=edge[j].next)
            d[edge[j].v]++;
    }
    for (int i=n; i>0; i--){
        int k=q[i];
        for (int j=head[k]; j; j=edge[j].next)
            b[c[edge[j].v]]=i;
        for (int j=1; ; j++)
            if (b[j]!=i){
                c[k]=j;
                s=max(s,j);
                break;
            }
    }

    printf("%d\n",s);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-22 07:23:05

【最小染色】【HNOI 2008】【bzoj 1006】神奇的国度的相关文章

BZOJ 1006 神奇的国度(弦图的染色数)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1006 题意:给定一个弦图,求最小染色数.就是用最小数目的颜色进行染色使得任意两个相邻的节点颜色不同. 思路:(1)求出弦图的完美消除序列. (2)贪心染色.从后向前用可以用的编号最小的颜色染色.在这里因为最小染色等于最大团,我直接求的最大团.为什么最小染色等于最大团呢?最大团w(G) 是包含点数最多的团,最小染色x(G)是相邻点不同色的最小颜色个数.那么w(G)<=x(G),因为最大团

bzoj 1006 神奇的国度

题目大意: 一个弦图,求最小点染色 思路: 使用最大势算法 完美消除序列从后往前依次给每个点,给每个点染上可以染的最小的颜色 --cdq 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstdlib> 6 #include<cstring> 7 #include<queue> 8 #inc

【BZOJ】1006 神奇的国度

[解析]完美消除序列+染色 [Analysis] 由题知他们的关系构成一个弦图,所以求出完美消除序列一定是成立的. 先求出,然后根据序列来染色,尽可能染小的. 其实时间戳那里用个线段树+二分好像也不错,甚至树状数组都可以,因为元素的变化是单调的... 在此给出证明: 首先进行以下的定义: 团数:最大团的大小. 色数:染色最少用的颜色. ∵团中颜色要两两不同 ∴团数<=色数 ∵我们对序列的染色共染了t种颜色且这样的染色是合法的,但是暂时不能保证最少. ∴t>=色数. 又∵我们的染色方法是贪心的,

[BZOJ 1006] [HNOI2008] 神奇的国度 【弦图最小染色】

题目链接: BZOJ - 1006 题目分析 这道题是一个弦图最小染色数的裸的模型. 弦图的最小染色求法,先求出弦图的完美消除序列(MCS算法),再按照完美消除序列,从后向前倒着,给每个点染能染的最小颜色. 求出的颜色数就是最小染色,同时也是最大团. 代码 #include <iostream> #include <cstdlib> #include <cstdio> #include <cmath> #include <cstring> #in

BZOJ 1006: [HNOI2008]神奇的国度 弦图的最小染色问题

弦图的最小染色问题: 先求出完美消除序列,然后从后往前贪心染色 1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 2245  Solved: 1006 [Submit][Status][Discuss] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等

BZOJ 1006 HNOI2008 神奇的国度 弦图最小染色 MCS算法

题目大意:给定一个弦图,求最小染色 弦图相关问题,具体见陈丹琦09年讲稿<弦图与区间图> PPT里有一个问题没说清楚 就是MCS算法的O(m+n)怎么来的 那个在 http://tieba.baidu.com/p/2891159900 有jcvb神犇详细的解答 至于染色如何标号,时间戳标记暴力硬扫即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

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

1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1788  Solved: 775[Submit][Status] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2...An之间仅存在N对认识关系:(A1A2)

BZOJ 1006 HNOI2008 奇妙的国度 弦图最小染色 MCS算法

题目大意:给定一个弦图,求最小染色 弦图相关问题,详细见陈丹琦09年讲稿<弦图与区间图> PPT里有一个问题没说清楚 就是MCS算法的O(m+n)怎么来的 那个在 http://tieba.baidu.com/p/2891159900 有jcvb神犇具体的解答 至于染色怎样标号,时间戳标记暴力硬扫就可以 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

【BZOJ】【1006】【HNOI2008】神奇的国度

弦图最小染色/MCS算法 Orz PoPoQQQ  (UPD:ydc的写法好像更熟悉一些……(类似堆优化的Dij啊~ 先留个坑……明天再看一看……感觉好神奇>_<(完美消除序列之于弦图 就好似 拓扑序列之于DAG,所以弦图的问题许多都要靠这个完美消除序列来做) 1 /************************************************************** 2 Problem: 1006 3 User: Tunix 4 Language: C++ 5 Resu