HDU1598

Posted whiteli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU1598相关的知识,希望对你有一定的参考价值。

按边上限速从小到大排序,枚举最小限速,每次从某个边开始把后面的边加入路径直到起点终点联通,更新最小值为最大限速减去开始本次枚举的边上的限速。

若不能联通,输出-1。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 struct node{
 5     int from,to,w;
 6     bool operator < (const node &a){
 7         return w<a.w;
 8     }
 9 }a[1001];
10 int n,m,f[201],q,u,v,ans=1e9,j;
11 void ini(){
12     for (int i=1;i<=n;i++) f[i]=i;
13 }
14 
15 int getf(int u){
16     return f[u]==u?f[u]:f[u]=getf(f[u]);
17 }
18 
19 void merge(int u,int v){
20     f[getf(u)]=getf(v);
21 }
22 
23 void solve(){
24     while (cin>>n>>m){
25         for (int i=1;i<=m;i++) scanf("%d %d %d",&a[i].from,&a[i].to,&a[i].w);
26         sort(a+1,a+1+m);
27         cin>>q;
28         while (q--){
29             scanf("%d %d",&u,&v);
30             ans=1e9;
31             for (int i=1;i<=m;i++){
32                 ini();
33                 for (j=i;j<=m && getf(u)!=getf(v);j++) merge(a[j].from,a[j].to);
34                 if (getf(u)==getf(v)) ans=min(ans,a[j-1].w-a[i].w);
35             }
36             if (ans==1e9) cout<<-1<<endl;
37             else cout<<ans<<endl;
38         }
39     }
40 }
41 
42 int main()
43 {
44     solve();
45     return 0;
46 }

 

以上是关于HDU1598的主要内容,如果未能解决你的问题,请参考以下文章

POJ1598 ZOJ1315 HDU1606 UVA409 UVALive5493 Excuses, Excuses!文本

hdu1598 find the most comfortable road 枚举+最小生成树

hdu1598 find the most comfortable road (枚举)+并查集

HDU 1598 find the most comfortable road(最小生成树)

优化算法多目标蚁狮优化算法(MOALO)含Matlab源码 1598期

P1598 垂直柱状图