题目链接:D-数据中心
题目描述:
Input:
如上。
Output:
如上。
Sample Input:
4
5
1
1 2 3
1 3 4
1 4 5
2 3 8
3 4 2
Sample Output:
4
Note:
思路:
本题是最小生成树问题,输出结果是树的最大边权代表最大时间。获得最小生成树采用kruskal算法。
总结:
本次作业题目很有针对性,也是因为最小生成树和相关算法比较重要。
代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<vector>
using namespace std;
struct node{
int a,b,c;
node(int x,int y,int z){
a=x,b=y,c=z;
}
};
vector<node> k;
int father[100000];
int find(int a){
return (father[a]==a?a:(father[a]=find(father[a])));
}
bool compare(node a,node b){
return a.c<b.c;
}
int main(){
//freopen("in.txt","r",stdin);
int n,m,root,x,y,z,ans=0,cnt=0;
cin>>n>>m>>root;
for(int i=0;i<n;i++)
father[i]=i;
for(int i=0;i<m;i++){
cin>>x>>y>>z;
k.push_back(node(x,y,z));
}
sort(k.begin(),k.end(),compare);
for(int i=0;i<m;i++){
int aaa=find(k[i].a);
int bbb=find(k[i].b);
if(aaa!=bbb){
if(ans<=k[i].c)
ans=k[i].c;
father[aaa]=bbb;
cnt++;
if(cnt==n*(n-1)/2)
break;
}
}
cout<<ans;
return 0;
}