最小生成树,让最长边最短
kruskal可以让最长边最短,因为边是排过序的
样例并没有错,因为题目中只要求连通就好,而且在最长边不变的 情况下短边冗余也是可以的
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
typedef pair<int,pii> piii;
int n,m;
int father[2000];
int GetFather(int x)
{
if (father[x]==x)
return x;
else
{
int t=GetFather(father[x]);
father[x]=t;
return t;
}
}
void Gao()
{
vector<piii>a;
bool f[20000]={0};
for (int i=1;i<=n;i++)
father[i]=i;
for(int i=0;i<m;i++)
{
int x,y,w;
cin>>x>>y>>w;
a.push_back(make_pair(w,make_pair(x,y)));
}
int num,ans=0;
sort(a.begin(),a.end());
for (int i=0;i<m;i++)
{
int x1,x2;
x1=GetFather(a[i].second.first);
x2=GetFather(a[i].second.second);
if (x1!=x2)
father[x2]=x1,f[i]=true,num++,ans=max(ans,a[i].first);
}
cout<<ans<<endl;
cout<<num<<endl;
for (int i=0;i<m;i++)
{
if (f[i])
printf("%d %d\n",a[i].second.first,a[i].second.second);
}
}
int main()
{
while (cin>>n>>m)
Gao();
return 0;
}