POJ 2395 Out of Hay \text{POJ 2395 Out of Hay} POJ 2395 Out of Hay
题意简述
给定一个图,求出图中 M S T MST MST(最小生成树)中的最长边。
题解
算法:Prim最小生成树算法
注:对于Prim不太熟的读者可以参考: https://blog.csdn.net/laoyao_legend/article/details/80886988
朴素的Prim也可以过哦!
一样的,在最后更新一下答案就行了。
贴代码:
#include<iostream>
#include<algorithm>
#include<cstring>//Caution:POJ不支持万能头文件。。。
using namespace std;
typedef long long ll;
const int N=2000+50;
const int INF=0x3f3f3f3f;
int Graph[N][N];
int n,m;
inline ll Prim_MST_Maxedge(int Start)
{
register int i,j;
ll MaxEdge=-1;
ll D[N];bool in[N];
memset(D,INF,sizeof(D));
memset(in,0,sizeof(in));
D[1]=0;
for(i=1;i<=n;i++)
{
int k=0;
for(j=1;j<=n;j++)
if(!in[j]&&D[j]<D[k])k=j;
in[k]=1;//加点。
for(j=1;j<=n;j++)//松弛操作。
if(!in[j]&&Graph[j][k]&&Graph[j][k]<D[j])D[j]=Graph[j][k];
}
for(i=1;i<=n;i++)//更新答案。
MaxEdge=max(MaxEdge,D[i]);
return MaxEdge;
}
int main()
{
memset(Graph,INF,sizeof(Graph));
register int i;
while(cin>>n>>m)
{
for(i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
Graph[u][v]=Graph[v][u]=min(w,Graph[v][u]);
//Caution:重边
}
cout<<Prim_MST_Maxedge(1)<<endl;
}
return 0;
}
At last:
puts("点个赞吧");