CCF CSP 201812-04 数据中心
问题描述
试题编号: | 201812-4 |
试题名称: | 数据中心 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
问题描述: | 样例输入 4 样例输出 4 样例说明 下图是样例说明。 |
这道题看起来很复杂 说白了就是求最小生成数的最长路径 克鲁斯卡尔算法 就解决了 上代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5+10;
struct Edges{
int u;
int v;
int w;
bool operator < (const Edges &edge){
return w<edge.w;
}
}edge[N];
int uf[N];
int find(int x){
if(uf[x] == -1) return x;
return uf[x] = find(uf[x]);
}
int main()
{
int n,m,r,ans,cnt;
scanf("%d%d%d",&n,&m,&r);
memset(uf,-1,sizeof(uf));
for(int i = 0; i < m ; i++){
cin >> edge[i].u >> edge[i].v >> edge[i].w;
}
sort(edge,edge+m);
ans = cnt = 0;
for(int i = 0; i < m;i++){
int u = edge[i].u;
int v = edge[i].v;
int w = edge[i].w;
int t1 = find(u);
int t2 = find(v);
if(t1!=t2){
uf[t1] = t2;
ans = max(ans,w);
cnt++;
}
if(cnt == n-1)
break;
}
return 0;
}