DFS 2568 hdu (树中两点距离的搜索)

来源:互联网 发布:淘宝大学的证书 编辑:程序博客网 时间:2024/06/08 15:02

以要搜索的起点为root,进行深搜,期间不断更新其他点到起点的距离,直到遇到终点。

#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<vector>#include<stack>#include<map>#define maxn 40005#define INF 99999999#define lson step<<1#define rson step<<1|1using namespace std;int T,n,m;int dis[maxn];bool book[maxn];vector<int>v[maxn];vector<int>we[maxn];void init(){   for(int i=0;i<maxn;i++)   {      v[i].clear();      we[i].clear();   }}void dfs(int st,int ed){   //if(st==ed)      //return ;int t;for(int i=0;i<v[st].size();i++){t=v[st][i];if(book[t]==true)continue;      book[t]=true;dis[t]=dis[st]+we[st][i];//cout <<  t << ' ' << dis[t] << endl;dfs(t,ed);}return ;}int main(){scanf("%d",&T);while(T--){scanf("%d %d",&n,&m);init();for(int i=0;i<n-1;i++){int a,b,w;scanf("%d %d %d",&a,&b,&w);v[a].push_back(b);v[b].push_back(a);we[a].push_back(w);we[b].push_back(w);}int st,ed;for(int i=0;i<m;i++){memset(dis,0,sizeof(dis));memset(book,false,sizeof(book));scanf("%d %d",&st,&ed);book[st]=true;dfs(st,ed);printf("%d\n",dis[ed]);}if(T!=0)         printf("\n");}return 0;}


原创粉丝点击