首页 > 其他 > 详细

[BZOJ1006]神奇的国度

时间:2015-12-26 14:53:31      阅读:177      评论:0      收藏:0      [点我收藏+]

安利论文 《弦图与区间图》---cdq

任意一个长度>3的环都有弦(即非连接相邻点的边),满足弦图的性质,对弦图进行最小染色

然而并不能想得明白,维萨最小染色是从从后往前,最大独立集是从前往后...

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define maxn 10005
 4 #define maxm 1000005
 5 int cnt,v[maxm<<1],next[maxm<<1],first[maxn];
 6 int lab[maxn],vis[maxn],se[maxn],used[maxn],col[maxn];
 7 void add(int st,int end){
 8     v[++cnt]=end;
 9     next[cnt]=first[st];
10     first[st]=cnt;
11 }
12 int main(){
13     int n,m,a,b;
14     scanf("%d%d",&n,&m);
15     for(int i=1;i<=m;i++){
16         scanf("%d%d",&a,&b);
17         add(a,b),add(b,a);
18     }
19     for(int i=n;i;i--){
20         int pos=0;
21         for(int j=1;j<=n;j++)
22             if(!vis[j]&&lab[j]>=lab[pos])pos=j;
23         vis[pos]=1;
24         se[i]=pos;
25         for(int e=first[pos];e;e=next[e])
26             lab[v[e]]++;
27     }
28     int ans=0;
29     for(int i=n;i;i--){
30         for(int e=first[se[i]];e;e=next[e])
31             used[col[v[e]]]=se[i];
32         int j=1;
33         while(used[j]==se[i])j++;
34         col[se[i]]=j;
35         if(j>ans)ans=j;
36     }
37     printf("%d\n",ans);
38     return 0;
39 }
View Code

 

[BZOJ1006]神奇的国度

原文:http://www.cnblogs.com/Ngshily/p/5077951.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!