HDU 2586 查找两点之间的距离

描述

村里有n个房子和一些双向道路连接。 每天这样的人总是喜欢问“如果我想有多远从房子房子B”? 通常很难回答。 但幸运的是这个村子int答案永远是独一无二的,因为道路建造的方式有一个独特的简单路径(“简单”意味着你不能访问一个地方两次)每两间房子。 你的任务是回答所有这些好奇的人们。

输入

第一行是一个整数T(T < = 10),说明测试用例的数量。
对于每个测试用例,在第一行有两个数n(2 < = n < = 40000)和m(1 < = m < = 200),房屋的数量和查询的数量。 每个组成三个数字我以下n - 1行,j,k,布鲁里溃疡单一空间分离,这意味着有一条路连接房子我和j,k长度(0 < k < = 40000)。 的房子都从1到n的标签。
下一个m线各有不同的整数i和j,你areato回答房子我和房子之间的距离。

输出

对于每个测试用例,输出线。 每一行代表查询的答案。 每个测试用例后输出一个乏味的线。

样例输入

2
3  2
1 2 10
3 15
1 2
2 3

2 - 2
1 2 100
1 2
2 1

样例输出

10
25
100
100记得 一开始  自己感觉特别难   很容易就超时了  一直不敢写  但是 结果却差好多   不会吵的   邻接表来一发
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<math.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define N 40006
int k,y,w[N],t;
int aa[N<<1];
struct node
{
    int f,g,v;
}a[N<<1];
void add(int e,int f,int g)
{
    a[k].f=f;
    a[k].g=g;
    a[k].v=aa[e];
    aa[e]=k++;
}
void bfs(int x,int sum)
{
    if(x==y)
        t=sum;
    if(t!=-1) return ;
    for(int i=aa[x];i!=-1;i=a[i].v)
    {
        int f=a[i].f;
        if(!w[f])
        {
            w[f]=1;
            bfs(f,sum+a[i].g);
        }
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        k=0;
        int n,m,e,f,g;
        memset(aa,-1,sizeof(aa));
        scanf("%d%d",&n,&m);
        for(int i=1;i<n;i++)
        {
            scanf("%d%d%d",&e,&f,&g);
            add(e,f,g);
            add(f,e,g);
        }
        while(m--)
        {
            int x;
            t=-1;
            scanf("%d%d",&x,&y);
            memset(w,0,sizeof(w));
            w[x]=1;
            bfs(x,0);
            printf("%d\n",t);
        }
    }
    return 0;
}
时间: 2024-11-14 13:07:29

HDU 2586 查找两点之间的距离的相关文章

利用结构类型的相关知识计算两点之间的距离

#include<stdio.h>#include<stdlib.h>#include<math.h> struct point{ /*点的结构类型名*/ float x; /*横坐标*/ float y; /*纵坐标*/ }; struct point readPoint(); /*函数原型声明*/float distance(struct point p1,struct point p2);/*主函数*/ int main(void){ struct point a

2D和3D空间中计算两点之间的距离

自己在做游戏的忘记了Unity帮我们提供计算两点之间的距离,在百度搜索了下. 原来有一个公式自己就写了一个方法O(∩_∩)O~,到僵尸到达某一个点之后就向另一个奔跑过去 /// <summary> /// 3维中如何计算两点之间的距离 /// </summary> /// <param name="p1"></param> /// <param name="p2"></param> /// &l

openlayer3计算两点之间的距离

openlayer3计算两点之间的距离 对应的openlayers的版本为3.7. 主要用的接口是ol.Sphere.haversineDistance([x1,y1],[x2,y2]): 4326坐标系中计算两点距离的方式为: var wgs84Sphere = new ol.Sphere(6378137); wgs84Sphere.haversineDistance(C1,C2); 示例为: var wgs84Sphere = new ol.Sphere(6378137); wgs84Sph

两点之间的距离

import javax.swing.JOptionPane; public class Distance { public static void main(String[] args){ String input = JOptionPane.showInputDialog(null,"请输入x1的坐标:","对话框",JOptionPane.QUESTION_MESSAGE); String input1 = JOptionPane.showInputDialo

poj 2251(广搜求两点之间的距离)

题目链接:http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16682   Accepted: 6491 Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit

使用友元函数计算两点之间的距离

#include <iostream> #include <cmath> using namespace std; class CPoint//点类 { private: double x;//横坐标 double y;//纵坐标 public: //使用初始化表初始化数据成员 CPoint(double xx=0,double yy=0):x(xx),y(yy){} //定义友元函数用于计算两点之间的距离 friend double Distance(CPoint &p1

sql server2008根据经纬度计算两点之间的距离

--通过经纬度计算两点之间的距离 create FUNCTION [dbo].[fnGetDistanceNew] --LatBegin 开始经度 --LngBegin 开始维度 --29.490295,106.486654,29.615467, 106.581515 (@LatBegin1 varchar(128), @LngBegin1 varchar(128),@location varchar(128)) Returns real AS BEGIN --转换location字段,防止字段

HDU 2001 计算两点间的距离

Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开. Output 对于每组输入数据,输出一行,结果保留两位小数. Sample Input 0 0 0 1 0 1 1 0 Sample Output 1.00 1.41 题意:输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. #include <stdio.h>

JAVA实现求一点到另两点连线的距离,计算两点之间的距离

直接上代码 /** *计算两点之间距离 */ public static double getDistance(Point start,Point end){ double lat1=start.getX().doubleValue(); double lat2=end.getX().doubleValue(); double lon1=start.getY().doubleValue(); double lon2=end.getY().doubleValue(); return Math.sq