201812-4 | |
試題名稱: | 數據中心 |
時間限制: | 1.0s |
內存限制: | 512.0MB |
問題描述: |
樣例輸入 4 樣例輸出 4 樣例說明 下圖是樣例說明。 |
答題欄
裸kruskal 求最大邊
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x, y , t;
}s[500500];
int pre[500500];
bool cmp(node a, node b){
return a.t < b.t;
}
int findd(int x)
{
if(x == pre[x])
return x;
return pre[x] = findd(pre[x]);
}
bool merge(int x, int y){
int fx = findd(x);
int fy = findd(y);
if(fx != fy)
{
pre[fx] = fy;
return true;
}
return false;
}
int main()
{
int n , m , k;
scanf("%d%d%d",&n,&m,&k) ;
for(int i = 1; i <= m ; i ++)
scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].t);
sort(s + 1,s + 1 + m,cmp);
int cnt = 0;
for(int i = 1; i <= n; i ++)
pre[i] = i;
int maxn = 0;
for(int i = 1; i <= m; i ++)
{
if(merge(s[i].x,s[i].y))
{
cnt++;
maxn = max(s[i].t, maxn);
}
if(cnt == n - 1)
{
printf("%d\n",maxn);
return 0;
}
}
return 0;
}