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(最小生成树)