求最长路的最短路。
提交后得100分的C++程序如下:
#include<iostream>
#include<queue>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100005;
const int inf=0x3f3f3f3f;
int n,m,src;
int dist[maxn];
bool inque[maxn];
queue<int> q;
struct edge
{
int v,len;
edge(){
}
edge(int v1,int l)
{
v=v1,len=l;
}
};
vector<edge> g[maxn];
void spfa()
{
for(int i=0;i<=n;i++) dist[i]=inf;
dist[src]=0;
while(!q.empty()) q.pop();
q.push(src);
inque[src]=true;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0;i<g[u].size();i++)
{
if(max(dist[u],g[u][i].len)<dist[g[u][i].v])
{
dist[g[u][i].v]=max(dist[u],g[u][i].len);
if(!inque[g[u][i].v])
{
inque[g[u][i].v]=true;
q.push(g[u][i].v);
}
}
}
inque[u]=false;
}
}
int main()
{
cin>>n>>m>>src;
int max1=0;
for(int i=1;i<=m;i++)
{
int u,v,len;
cin>>u>>v>>len;
g[u].push_back(edge(v,len));
g[v].push_back(edge(u,len));
}
spfa();
for(int i=1;i<=n;i++) max1=max(max1,dist[i]);
cout<<max1<<endl;
}