poj 3723 MST

来源:互联网 发布:nginx 新增模块 编辑:程序博客网 时间:2024/05/23 01:16

点击打开链接

#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int M = 51010;struct edge{long u;long v;long long cost;bool operator <(const edge &t)const{return cost>t.cost; }}e[M];long n,p,m,fa[M];void Inin(){for(int i=0;i<n+p;i++) //{fa[i]=i;}}int find(int x){if(x!=fa[x]){fa[x]=find(fa[x]); //路径压缩}return fa[x];}void Union(int x,int y){int a=find(x);int b=find(y);if(a!=b){fa[a]=b;}}void Kruskal(){Inin();// union-set 初始化 long long ans=0;for(int i=0;i<m;i++){if(find(e[i].u)!=find(e[i].v)){Union(e[i].u,e[i].v);ans+=e[i].cost;  // 节约的钱要最大 }}cout<<(n+p)*10000-ans<<endl;}int main() {int t;cin>>t;while(t--){cin>>n>>p>>m;for(int i=0;i<m;i++){scanf("%d%d%ld",&e[i].u,&e[i].v,&e[i].cost);e[i].v+=n; //偏移 }sort(e,e+m);Kruskal(); //每次将两个连通分量合并成一个时  花费最小 }return 0;}

0 0
原创粉丝点击