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 #include<map>
 9 #include<vector>
10 #define ll long long
11 #define inf 2147483611
12 #define MAXN 10010
13 using namespace std;
14 inline int read()
15 {
16     int x=0,f=1;char ch=getchar();
17     while(!isdigit(ch)) {if(ch==‘-‘) f=-1;ch=getchar();}
18     while(isdigit(ch)) {x=x*10+ch-‘0‘;ch=getchar();}
19     return x*f;
20 }
21 int nxt[MAXN*200],fst[MAXN],to[MAXN*200],cnt,n,m,dis[MAXN];
22 int q[MAXN],tmp,clr[MAXN],ans;
23 bool vis[MAXN];
24 void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v;}
25 int main()
26 {
27     n=read(),m=read();
28     int a,b;
29     for(int i=1;i<=m;i++) {a=read(),b=read();add(a,b);add(b,a);}
30     for(int i=n;i;i--)
31     {
32         tmp=0;
33         for(int j=1;j<=n;j++)
34             if(!vis[j]&&dis[j]>=dis[tmp]) tmp=j;
35         vis[tmp]=1,q[i]=tmp;
36         for(int j=fst[tmp];j;j=nxt[j]) dis[to[j]]++;
37     }
38     for(int i=n;i;i--)
39     {
40         memset(vis,0,sizeof(vis));
41         for(int j=fst[q[i]];j;j=nxt[j]) vis[clr[to[j]]]=1;
42         for(int j=1;j<=n;j++) if(!vis[j]) {clr[q[i]]=j,ans=max(j,ans);break;}
43     }
44     printf("%d",ans);
45 }

时间: 2024-10-12 07:23:21

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 神奇的国度

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

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

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

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 )

弦图最小染色...先用MCS求出完美消除序列然后再暴力染色... ------------------------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std; const int maxn = 10009; inline int read() { char c = getchar(); int ret = 0; for(; !i

bzoj 1006: [HNOI2008]神奇的国度 -- 弦图(最大势算法)

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

【最小染色】【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),而没有其

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] 神奇的国度 【弦图最小染色】

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