给定一棵树,询问树上两个点之间距离。
#include<string.h>
#include<cstdio>
#include<cstdlib>
#include<vector>
using namespace std;
struct node
{
int v,c;
};
const int maxn=10002;
const int maxk=18;
vector<node>tree[maxn];
int d[maxn][maxk];
int eluer[maxn*2];
int dep[maxn*2];
int first[maxn];
int dist[maxn];
int n,tot,m;
void DFS(int x,int f,int depth,int distance)
{
int size=tree[x].size();
int i,j;
dist[x]=distance;
eluer[tot]=x;
dep[tot]=depth;
first[x]=tot;
tot++;
for(i=0;i<size;i++)
{
j=tree[x][i].v;
if(j==f)continue;
DFS(j,x,depth+1,distance+tree[x][i].c);
eluer[tot]=x;
dep[tot]=depth;
tot++;
}
}
void RMQ()
{
int t=tot;
int k=-1,i,j;
while(t)
{
t>>=1;
k++;
}
for(i=0;i<tot;i++)d[i][0