• hdu1598:find the most comfortable road(并查集)


    http://acm.hdu.edu.cn/showproblem.php?pid=1598

    Problem Description

    XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Flycar的“舒适度”有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求,flycar必须瞬间提速/降速,痛苦呀 ),
    但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。

    Input

    输入包括多个测试实例,每个实例包括:
    第一行有2个正整数n (1<n<=200)和m (m<=1000),表示有N个城市和M条SARS。
    接下来的行是三个正整数StartCity,EndCity,speed,表示从表面上看StartCity到EndCity,限速为speedSARS。speed<=1000000
    然后是一个正整数Q(Q<11),表示寻路的个数。
    接下来Q行每行有2个正整数Start,End, 表示寻路的起终点。

    Output

    每个寻路要求打印一行,仅输出一个非负整数表示最佳路线的舒适度最高速与最低速的差。如果起点和终点不能到达,那么输出-1。

    Sample Input

    4 4
    1 2 2
    2 3 4
    1 4 1
    3 4 2
    2
    1 3
    1 2

    Sample Output

    1
    0

    解题思路:

    并查集枚举判断两个点连通的时候最大速度和最小速度的差值。

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    #define N 1020
    struct data{
    	int u;
    	int v;
    	int w;
    }e[N];
    int f[N];
    int cmp(data a, data b)
    {
    	return a.w<b.w;
    }
    int getf(int v)
    {
    	if(f[v]==v)
    		return v;
    	else
    	{
    		f[v]=getf(f[v]);
    		return f[v];
    	}
    }
    int merge(int u, int v)
    {
    	int t1, t2;
    	t1=getf(u);
    	t2=getf(v);
    	if(t1!=t2)
    	{
    		f[t2]=t1;
    		return 1;
    	}
    	return 0;
    }
    int main()
    {
    	int i, j, n, m, count, ans, T, s, t, inf=99999999;
    	while(scanf("%d%d", &n, &m)!=EOF)
    	{
    		for(i=0; i<m; i++)
    			scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
    		
    		sort(e, e+m, cmp);
    		scanf("%d", &T);
    		while(T--)
    		{
    			scanf("%d%d", &s, &t);
    			ans=inf;
    			for(i=0; i<m; i++)
    			{
    				for(j=0; j<=n; j++)
    					f[j]=j;
    				for(j=i; j<m; j++)
    				{
    					merge(e[j].u, e[j].v);
    					if(getf(s)==getf(t))
    					{
    						ans=min(ans, e[j].w-e[i].w);
    						break;
    					}
    				}
    			}
    			if(ans==inf)
    				printf("-1
    ");
    			else
    				printf("%d
    ", ans);
    		}
    		
    	}
    	return 0;
    }
  • 相关阅读:
    一步一步教你使用Jmail实现邮件的接收与发送
    超级简单:使用FOR XML AUTO控制XML输出
    WF4.0工作流设计器快捷键
    糟糕编程的白痴指南
    WPF:全文翻译小工具
    获取为以逗号分隔列值的字符串
    WF 4.0 RC 学习资源
    这个杀手不太冷
    《Expert Cube Development with Microsoft SQL Server 2008 Analysis Services》读书笔记第九章:保护Cube(二)
    windows server 2008下无法检查到无线信号的解决方法
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852686.html
Copyright © 2020-2023  润新知