uva 10457(最小瓶颈路)

Posted 发牌员

tags:

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

比赛的时候读错题了,赛后非要建最小生成树然后dfs暴搜,有人告诉我不行,我还非要改一遍,改了一年,想明白了,不能保证下限,比如2,3,5能使两个点连同,4,5也能的话,就不对了,想想我也是个铁头娃

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int maxv=200+10;
const int maxn=1000+100;
const int inf=0x3f3f3f3f;
int c[maxv];
int vis[maxv];
int maxcost[maxv][maxv];
int n,m,k;
int s,t;
int found(int x)
{
     if(x==c[x]) return x;
     else return c[x]=found(c[x]);
}
bool same(int x,int y)
{
    if(found(x)==found(y))
    {
        return 1;
    }
    else return 0;
}
void unit(int x,int y)
{
    x=found(x);
    y=found(y);
    if(x==y) return;
    c[x]=y;
}
struct note
{
    int u;
    int v;
    int len;
    bool operator <(const note &p) const
    {
        return len<p.len;
    }
}aa[maxn];
void init()
{
    for(int i=0;i<=n;i++)
        c[i]=i;
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        init();
        for(int i=1;i<=m;i++)
            scanf("%d%d%d",&aa[i].u,&aa[i].v,&aa[i].len);
         sort(aa+1,aa+1+m);
        int nn,mm,k;
        scanf("%d%d",&nn,&mm);
        scanf("%d",&k);
       for(int i=1;i<=k;i++)
       {
          scanf("%d%d",&s,&t);
            int ans=inf;
          for(int i=1;i<=m;i++)
          {
              init();
              for(int j=i;j<=m;j++)
              {
                  if(!same(aa[j].u,aa[j].v))
                  {
                      unit(aa[j].v,aa[j].u);
                      if(same(s,t))
                      {
                         ans=min(ans,aa[j].len-aa[i].len);
                         break;
                      }
                  }
              }

          }
          printf("%d\n",ans+nn+mm);
       }
    }
    return 0;
}

 

以上是关于uva 10457(最小瓶颈路)的主要内容,如果未能解决你的问题,请参考以下文章

UVA534Frogger 最小瓶颈路

最小瓶颈路 Uva 534 Frogger

luogu题解 UVA534 Frogger--最小瓶颈边

UVA - 11354 Bond(最小生成树+LCA+瓶颈路)

最小瓶颈路

训练指南 UVA - 11354(最小生成树 + 倍增LCA)