Advertisement

树上游走(寒假集训终结考试题)

阅读量:

题目描述

复制代码
    #include<bits/stdc++.h>
     using namespace std;
    const int MAXN=10000000; 
    int n,m;
    vector< int > a[MAXN];
    int p[MAXN][25],deep[MAXN],size[MAXN],f;
    double ans[MAXN];
    void dfs(int x,int dep)
    { 
    for(int i=1;i<=22;i++)
     p[x][i]=p[p[x][i-1]][i-1];
    deep[x]=dep;
    size[x]=1;
    for(int i=0;i<a[x].size();i++)
    {
      int y=a[x][i];
      if(y==p[x][0]) continue;
      p[y][0]=x;
      dfs(y,dep+1);
      size[x]+=size[y];
    	}
    }
    inline int lca(int i,int j)
    {
     int k;
    if(deep[i]<deep[j])  swap(i,j);
    if(deep[i]>deep[

全部评论 (0)

还没有任何评论哟~