hdu 1598 find the most comfortable road

hdu 1598
find the most comfortable road
题目的意思是很多连接的点中,问x到y点的最小差值。
差值的计算是,在这条路径中的最大的值-最小的值。
感觉像流的问题。
却十分巧妙的用并查集来做。

问题的关键还是在处理 最小差值。
1贪心+并查。
将排序(从小到大)后的进行判断,是否f[x]==f[y]来结束。
那谁是起点??这也是个难点,任一点都可能是起点,我们只能通过for(i=1;i<=n;i++)来求取min。
int pd(int x,int y,int m,int n)
{
    int i,j,ans=10000003;
    for(i=1;i<=m;i++)
    {
        ini(n);
        for(j=i;j<=m;j++)
        {
            Union(a[j].q,a[j].z);
            if(find(x)==find(y))
                break;
        }
        if(j>=m+1)break;
        if(a[j].info-a[i].info<ans)
            ans=a[j].info-a[i].info;
    }
    if(ans==10000003) return -1;
    else return ans;
}

posted @ 2013-06-27 14:42  芷水  阅读(190)  评论(0编辑  收藏  举报