POJ 3723 Conscription(最小生成树)
来源:互联网 发布:战术无线通信与网络 编辑:程序博客网 时间:2024/06/05 17:24
Conscription
题目链接:
http://poj.org/problem?id=3723
解题思路:
把人看做顶点,关系看做边,这个问题就可以转化为求解无向图中最大权森林问题。最大权森林问题可以通过把所有边权取反之后
用最小生成树的算法求解。
AC代码:
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 50005;struct Edge{ int u,v,cost;}es[maxn];int n,m,r;int V;int pa[maxn];bool cmp(Edge a,Edge b){ return a.cost < b.cost;}int findset(int x){ if(x != pa[x]) pa[x] = findset(pa[x]); return pa[x];}int kruskal(){ sort(es,es+r,cmp); for(int i = 0; i <= V; i++) pa[i] = i; int i,u,v,cnt = V,sum = 0; for(i = 0; i < r; i++) { u = findset(es[i].u); v = findset(es[i].v); if(u != v) { sum += es[i].cost; pa[v] = u; if(--cnt == 1) break; } } return sum;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d%d",&n,&m,&r); int x,y,d; for(int i = 0; i < r; i++){ scanf("%d%d%d",&x,&y,&d); es[i] = (Edge){x,n+y,-d}; } V = n+m; printf("%d\n",10000*(V)+kruskal()); } return 0;}
0 0
- poj 3723 Conscription (最小生成树)
- POJ 3723 Conscription(最小生成树)
- poj 3723 Conscription ---最小生成树
- 【POJ】3723 Conscription 最小生成树
- POJ 3723 Conscription【最小生成树】
- POJ, 3723 Conscription(最小生成树)
- POJ-3723 Conscription(最小生成树)
- poj 3723 Conscription(最小生成树)
- POJ 3273 Conscription(最小生成树)
- poj 3723 Conscription(最小生成树拓展)
- POJ 题目3723 Conscription(最小生成树变形)
- POJ 3723 Conscription(最小生成树-Kruskal)
- POJ 3723 Conscription(最小生成树--kruskul)
- POJ - 3723 Conscription(最小生成树Kruskal,思路)
- poj 3723 Conscription 【最小生成树(克鲁斯卡尔)】
- POJ 3723 Conscription(构造+最小生成树Kruskal)
- POJ 3723 Conscription(并查集+最小生成树)
- POJ 3723 Conscription (Kruskal并查集求最小生成树)
- 1314祝福语
- poj 2442 Sequence
- DUBBO配置规则详解
- PHP中file_exists与is_file,is_dir的区别介绍
- 如何才能做一位好项目经理
- POJ 3723 Conscription(最小生成树)
- 图片拖拽、旋转、缩放、移动
- Hadoop+Hbase+Zookeeper集群环境搭建
- JS学习第九天----数组
- 读书日记之《一个程序员的奋斗史》
- 国王的烦恼---nyoj
- 升级win10后Django报错[Errno 10013]
- HTML5中的canvas详述
- 角点检测(Harris,Fast,surf)