【BZOJ 1083】 [SCOI2005]繁忙的都市
【链接】 我是链接,点我呀:)
【题意】
【题解】
很明显的最小生成树了。 输出最后选的那条边就好了。【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 300;
const int M = 1e6;
struct abc{
int x,y,z;
};
int n,m,f[N+10];
abc a[M+10];
int ff(int x){
if (f[x]==x) return x;
else return f[x] = ff(f[x]);
}
bool cmp(abc a,abc b){
return a.z<b.z;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i = 1;i <= m;i++){
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
}
sort(a+1,a+1+m,cmp);
int cnt = 0;
for (int i = 1;i <= n;i++) f[i] = i;
for (int i = 1;i <= m;i++){
int r1 = ff(a[i].x),r2 = ff(a[i].y);
if (r1!=r2){
f[r1] = r2;
cnt++;
}
if (cnt==n-1){
printf("%d %d\n",cnt,a[i].z);
return 0;
}
}
return 0;
}