hdu1598

思路:对所有路径的速度从小到大排个序,然后枚举高度差就ok......

#include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

#define M 1<<30

struct node

{

    int v1,v2;

    int dis;

}s[2000];

int father[2000];

int find(int x)

{

    while(x!=father[x])

    x=father[x];

    return x;

}

int cmp(const node a,const node b)

{

    if(a.dis<b.dis)

    return 1;

    else   return 0;

}

int main()

{

    int n,m;

    while(scanf("%d%d",&n,&m)>0)

    {

        for(int i=0;i<m;i++)

        {

            scanf("%d%d%d",&s[i].v1,&s[i].v2,&s[i].dis);

        }

        sort(s,s+m,cmp);

        int q;

        scanf("%d",&q);

        while(q--)

        {

            int tmp,tmp1;

            int minx=M;

            scanf("%d%d",&tmp,&tmp1);

            for(int i=0;i<m;i++)

            {

                for(int k=0;k<=n;k++)

                father[k]=k;

                for(int j=i;j<m;j++)

                {

                    int x=find(s[j].v1);

                    int y=find(s[j].v2);

                    if(x!=y)

                    father[x]=y;

                    if(find(tmp)==find(tmp1))

                    {

                        if(minx>(s[j].dis-s[i].dis))

                        {

                            minx=s[j].dis-s[i].dis;

                        }

                        break;

                    }

                }

            }

            if(minx>=M)

            printf("-1\n");

            else

            printf("%d\n",minx);

        }

    }

    return 0;

}

 

你可能感兴趣的:(HDU)