點擊打開鏈接
題意:就是問兩個節點間的距離
思路:又切了一道模版水題,不解釋了,看不懂變量含義的可以看我寫的這篇,解釋的比較詳細ZOJ 3195
#include#include #include #include #include #include using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=40010; struct edge{ int to,cost; edge(int a,int b){to=a;cost=b;} }; vector G[maxn]; int dp[maxn*2][20],L[maxn*2],E[maxn*2],dis[maxn],H[maxn]; bool vis[maxn]; int n,k; void dfs(int t,int deep){ k++;E[k]=t;L[k]=deep;H[t]=k; for(unsigned int i=0;i ri) swap(le,ri); int kk=0; while((1<<(kk+1))<=ri-le+1) kk++; if(L[dp[le][kk]]