1. 程式人生 > >bzoj 1006: [HNOI2008]神奇的國度【弦圖+LesBFS】

bzoj 1006: [HNOI2008]神奇的國度【弦圖+LesBFS】

source com name add https getc 什麽 getchar names

參考論文:https://wenku.baidu.com/view/6f9f2223dd36a32d73758126.html
參考代碼:http://hzwer.com/3500.html
雖然會寫了但是我還是不知道弦圖是個什麽玩意

#include<iostream>
#include<cstdio>
using namespace std;
const int N=20005,M=2000005;
int n,m,h[N],cnt,d[N],q[N],c[N],ha[N],ans;
bool v[N];
struct qwe
{
    int ne,to,va;
}e[M];
int read()
{
    int
r=0,f=1; char p=getchar(); while(p>‘9‘||p<‘0‘) { if(p==‘-‘) f=-1; p=getchar(); } while(p>=‘0‘&&p<=‘9‘) { r=r*10+p-48; p=getchar(); } return r*f; } void add(int u,int v) { cnt++; e[cnt].ne=h[u]; e[cnt].to=v; h[u]=cnt; } int
main() { n=read(),m=read(); for(int i=1;i<=m;i++) { int x=read(),y=read(); add(x,y); add(y,x); } for(int i=n;i>=1;i--) { int t=0; for(int j=1;j<=n;j++) if(!v[j]&&d[j]>=d[t]) t=j; v[t]=1
,q[i]=t; for(int j=h[t];j;j=e[j].ne) d[e[j].to]++; } for(int i=n;i>=1;i--) { int t=q[i]; for(int j=h[t];j;j=e[j].ne) ha[c[e[j].to]]=i; int j; for(j=1;;j++) if(ha[j]!=i) break; c[t]=j; if(j>ans) ans=j; } printf("%d\n",ans); return 0; }

bzoj 1006: [HNOI2008]神奇的國度【弦圖+LesBFS】