1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| struct E { int y,next; }e[2000010]; int g[10010],tmp,d[10010],q[10010],hash[10010],col[10010]; bool v[10010]; void build(int u,int v) { e[++tmp].y=v;e[tmp].next=g[u];g[u]=tmp; e[++tmp].y=u;e[tmp].next=g[v];g[v]=tmp; } int main() { int n,m,a,b,t,ans=0; scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&a,&b); build(a,b); } for (int i=n;i;i--) { int t=0; for (int j=1;j<=n;j++) if (!v[j]&&d[j]>=d[t]) t=j; v[t]=true;q[i]=t; for (int j=g[t];j;j=e[j].next) d[e[j].y]++; } for (int i=n;i;i--) { int t=q[i],j; for (j=g[t];j;j=e[j].next) hash[col[e[j].y]]=i; for (j=1;hash[j]==i;j++); col[t]=j; if (j>ans) ans=j; } printf("%d",ans); return 0; }
|