poj 1797 Heavy Transportation

#include <iostream>            //dijstra算法的变形,求一条路径,使得它的最小边达到最大值
#include<set>
using namespace std;
int t,n,m,i,j,v,harsh[1005],edge[1005][1005],distD[1005],visit[1005];
void Dijstra()
{
visit[
1]=1;distD[1]=0;
for(i=2;i<=v;++i)
{
distD[i]
=edge[1][harsh[i]];
visit[i]
=0;
}
for(i=2;i<=v;++i)
{
int Max=-1,u;
for(j=1;j<=v;++j)
{
if(!visit[j]&&distD[j]>Max) //找最大值
{
u
=j;Max=distD[j];
}
}
visit[u]
=1;
if(u==v)
{
printf(
"%d\n\n",distD[u]);
return ;
}
for(j=1;j<=v;++j)
{
if(!visit[j])
{
int e=min(distD[u],edge[harsh[u]][harsh[j]]); //求最长路径的最小边 ,与poj 2253 正好相反
if(distD[j]<e)
distD[j]
=e;
}
}
}
}
int main()
{
int a,b,c;
scanf(
"%d",&t);
for(int k=1;k<=t;++k)
{
scanf(
"%d%d",&n,&m);
memset(edge,
-1,sizeof(edge));
set<int> col;
while(m--)
{
scanf(
"%d%d%d",&a,&b,&c);
col.insert(a);col.insert(b);
edge[a][b]
=edge[b][a]=c;
}
v
=0;
for(set<int>::iterator ite=col.begin();ite!=col.end();++ite)
harsh[
++v]=*ite; //对坐标离散化
printf("Scenario #%d:\n",k);
Dijstra();
}
return 0;
}

  

posted on 2011-07-22 16:30  sysu_mjc  阅读(124)  评论(0编辑  收藏  举报

导航