时间戳 数的深度
dfs序:[l[i],r[i]]是子树的dfs序
树的重心
1 void dfs(int x) 2 { 3 vis[x]=1;size[x]=1; 4 int mx=0; 5 qxx(i,x) 6 { 7 if(vis[v[i]]) continue; 8 dfs(v[i]); 9 size[x]+=size[y]; 10 gmax(mx,size[v[i]]) 11 } 12 gmax(mx,n=size[x]); 13 if(mx<ans) 14 { 15 ans=mx; 16 pos=x; 17 } 18 }
拓扑排序
1 void add(int x,int y) 2 { 3 v[++tot]=y,nxt[tot]=hd[x],hd[x]=tot; 4 ++deg[y]; 5 } 6 void topsort() 7 { 8 queue<int> q; 9 FOR(i,1,n) if(!deg[i]) q.push(i); 10 while(!q.empty()) 11 { 12 int x=q.front();q.pop(); 13 a[++cnt]=x; 14 qxx(i,x) if(--deg[v[i]]==0) q.push(v[i]); 15 } 16 }