• [BZOJ1006][HNOI2008]神奇的国度


    bzoj
    luogu

    题意

    求一个弦图的最小色数。

    sol

    根据弦图的那套理论,最小色数等于最小团数。

    code

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int gi()
    {
    	int x=0,w=1;char ch=getchar();
    	while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    	if (ch=='-') w=0,ch=getchar();
    	while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    	return w?x:-x;
    }
    const int N = 1e6+5;
    int n,m,to[N<<1],nxt[N<<1],head[N],cnt,vis[N],label[N],best,ans;
    vector<int>v[N];
    void link(int u,int v){to[++cnt]=v,nxt[cnt]=head[u];head[u]=cnt;}
    int main()
    {
    	n=gi();m=gi();
    	for (int i=1;i<=m;++i)
    	{
    		int u=gi(),v=gi();
    		link(u,v);link(v,u);
    	}
    	for (int i=1;i<=n;++i) v[0].push_back(i);
    	for (int i=1,now;i<=n;++i)
    	{
    		bool fg=0;
    		while (!fg)
    		{
    			for (int j=v[best].size()-1;j>=0;--j)
    				if (!vis[v[best][j]]) {fg=1;now=v[best][j];break;}
    				else v[best].pop_back();
    			if (!fg) --best;
    		}
    		vis[now]=1;
    		for (int e=head[now];e;e=nxt[e])
    			if (!vis[to[e]])
    			{
    				v[++label[to[e]]].push_back(to[e]);
    				best=max(best,label[to[e]]);
    			}
    	}
    	for (int i=1;i<=n;++i) ans=max(ans,label[i]+1);
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    IAP
    golang笔记——map
    Unity自动打包 apk
    golang笔记——string
    golang笔记——数组与切片
    golang笔记——array
    golang笔记——struct
    golang笔记——流程控制
    golang笔记——数据类型
    golang笔记——IDE
  • 原文地址:https://www.cnblogs.com/zhoushuyu/p/8716961.html
Copyright © 2020-2023  润新知