How far away ? HDU

来源:互联网 发布:小天才早教机软件下载 编辑:程序博客网 时间:2024/05/01 19:30


How far away ?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17281    Accepted Submission(s): 6662


Problem Description
There are n houses in the village and some bidirectional roads connecting them. Every day peole always like to ask like this "How far is it if I want to go from house A to house B"? Usually it hard to answer. But luckily int this village the answer is always unique, since the roads are built in the way that there is a unique simple path("simple" means you can't visit a place twice) between every two houses. Yout task is to answer all these curious people.
 

Input
First line is a single integer T(T<=10), indicating the number of test cases.
  For each test case,in the first line there are two numbers n(2<=n<=40000) and m (1<=m<=200),the number of houses and the number of queries. The following n-1 lines each consisting three numbers i,j,k, separated bu a single space, meaning that there is a road connecting house i and house j,with length k(0<k<=40000).The houses are labeled from 1 to n.
  Next m lines each has distinct integers i and j, you areato answer the distance between house i and house j.
 

Output
For each test case,output m lines. Each line represents the answer of the query. Output a bland line after each test case.
 

Sample Input
23 21 2 103 1 151 22 32 21 2 1001 22 1
 

Sample Output
1025100100
 

Source
ECJTU 2009 Spring Contest

题意:求最短路。
解题思路:使用两个向量数组,一个存边关系,一个存权值,按照先后顺序,找最短路时,再使用站的先入先出的思想,向四周发散开来,避免成圈,需要进行标记,再用一个数组存,从初始点到每个点的距离。代码很好理解,如果不理解怎样存的权值,可以动手模拟一下,就理解了。

#include <stdio.h>#include <string.h>#include <algorithm>#include <vector>#include <stack>using namespace  std;#define maxn 40000+10vector<int>V[maxn];vector<int>W[maxn];int n,m,vis[maxn],dis[maxn];void Inf(){    for(int i=1; i<=n; i++)    {        V[i].clear();        W[i].clear();    }}int  dfs(int x,int y){    stack<int>Q;    memset(vis,0,sizeof(vis));    memset(dis,0,sizeof(dis));    Q.push(x);    vis[x]=1;    while(!Q.empty())    {        int p=Q.top();        Q.pop();        if(p==y)            break;        for(int i=0; i<V[p].size(); i++)        {            int t=V[p][i];            if(vis[t]) continue;            vis[t]=1;            Q.push(t);            dis[t]=dis[p]+W[p][i];      //W向量,存的权值        }    }    return dis[y];}int main(){    int t;    scanf("%d",&t);    while(t--)    {        Inf();        scanf("%d %d",&n,&m);        int a,b,c;        for(int i=1; i<n; i++)        {            scanf("%d %d %d",&a,&b,&c);            V[a].push_back(b);       //无向图,双向存储            V[b].push_back(a);            W[a].push_back(c);              W[b].push_back(c);      //方便,后面的权值向加。        }        for(int i=1; i<=m; i++)        {            scanf("%d %d",&a,&b);            printf("%d\n",dfs(a,b));        }    }    return 0;} 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一级消防工程师考试题型 注册二级消防工程师 注册消防工程师论坛 一级注册消防工程师教材 注册消防工程师报名 二级消防工程师考试科目 消防工程师报考条件二级 二级注册消防工程师报考条件 一级注册消防工程师论坛 二级消防工程师好考吗 一级注册消防工程师招聘 注册消防工程师难考吗 考一级消防工程师有用吗 消防工程师难度 一消防工程师 一级消防工程师考试难度 一级消防工程师好考吗 消防工程师待遇 注册消防工程师一级二级区别 一级注册消防工程师好考吗 注册消防工程师好不好考 一级消防工程师难度 二级注册消防工程师考试科目 二级消防考试时间 一级消防工程师招聘 陕西二级消防工程师报名时间 2017消防工程师考试时间 消防工程师代报名 消防技术综合能力 一级注册消防工程师报考条件 河北二级消防工程师报名时间 二级消防工程师报名条件 消防员考试报考条件 消防技术实务 一级注册消防工程师报名时间 消防安全工程师考试时间 消防注册工程师报考条件 2017一级消防工程师报名时间 二级消防考试科目 辽宁消防工程师报名时间 一级消防工程师免考条件