#include<cstdio>
#include<vector>
#define maxn 2000
#define inf 1<<29
using namespace std;
struct h{
int e;
int v;
};
vector<h>a[maxn];
bool vis[maxn];
int d[maxn];
int n,m;
int ans;
void dj(){
ans=inf;
for(int i=1;i<=n;i++){
d[i]=0;
vis[i]=0;
}
d[1]=inf;
for(int k=1;k<=n;k++){
int minn=0;
int u=-1;
for(int i=1;i<=n;i++){
if(vis[i]==0&&d[i]>minn){
minn=d[i];
u=i;
}
}
ans=min(ans,minn);
if(u==n)
break;
vis[u]=1;
for(int i=0;i<a[u].size();i++){
if(vis[a[u][i].e]==0&&a[u][i].v>d[a[u][i].e])
d[a[u][i].e]=a[u][i].v;
}
}
}
int main(){
int t;
int op=1;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
int x,y,z;
while(m--){
scanf("%d%d%d",&x,&y,&z);
a[x].push_back(h{y,z});
a[y].push_back(h{x,z});
}
dj();
printf("Scenario #%d:\n",op++);
printf("%d\n\n",ans);
for(int i=1;i<=n;i++)
a[i].clear();
}
return 0;
}
图论-最大生成树的最小边
最新推荐文章于 2020-07-12 23:41:53 发布