博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3723 Conscription---最大权森林---最小生成树
阅读量:7239 次
发布时间:2019-06-29

本文共 1527 字,大约阅读时间需要 5 分钟。

题目链接:

题目大意:

需要征募女兵N人, 男兵M人. 每征募一个人需要花费10000美元. 带式如果已经征募的人中有一些关系亲密的人, 那么可以少花一些钱. 给出若干的男女之前的1~9999指尖的亲密关系,征募某个人的费用是10000-(已经招募的人中和自己的亲密度最的最大值). 要求通过适当的征募顺序使得征募所有人所用的费用最小.

思路:

在征募某个人a时,如果使用来a和b之间的关系,那么就连一条a到b的边.假设这个图中存在圈,那么无论以什么顺序征募这个圈上的所有人, 都会产生矛盾.(只有男女关系是产生不了圈的…)因此可以直到这个图是一片森林. 反之,如果给了一片森林那么就可以使用对应的关系确定征募的顺序.

可以把人看作顶点, 关系看作边,这个问题就可以转化为求解无向图中的最大权森林问题.最大权森灵问题可以通过把所有边取反之后用最小生成树的算法求解.

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 typedef pair
Pair; 9 const int maxn = 50000 + 10;10 const int INF = 0x3f3f3f3f;11 int T, n, m, n1, n2;12 struct edge13 {14 int u, v, w;15 edge(int v, int w):v(v), w(w){}16 edge(){}17 bool operator <(const edge a)const18 {19 return w < a.w;20 }21 };22 edge e[maxn];23 int p[maxn];24 int Find(int x)25 {26 return x == p[x] ? x : p[x] = Find(p[x]);27 }28 void kruskal()29 {30 for(int i = 0; i <= n1 + n2; i++)p[i] = i;31 sort(e, e + m);32 int sum = 0;33 for(int i = 0; i < m; i++)34 {35 int u = e[i].u, v = e[i].v, w = e[i].w;36 int x = Find(u), y = Find(v);37 if(x == y)continue;38 sum += w;39 p[x] = y;40 }41 int ans = (n1 + n2) * 10000 + sum;42 cout<
<
> T;47 while(T--)48 {49 cin >> n1 >> n2 >> m;50 for(int i = 0; i < m; i++)51 {52 scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);53 e[i].v += n1;//将女人标号移至男人后面54 e[i].w = -e[i].w;//边取负数,求最小生成树,用总值减就得到最大森林权值55 }56 kruskal();57 }58 }

 

转载于:https://www.cnblogs.com/fzl194/p/8798084.html

你可能感兴趣的文章
redis-cluster研究和使用
查看>>
关于驰骋工作流引擎ccbpm 在工业自动化环境下的应用演示实例
查看>>
【序言】 高效高可靠消息服务器构建
查看>>
每天一个linux命令(6):rmdir 命令
查看>>
第六周作业
查看>>
浅谈Vim
查看>>
高端数据中心交换机散热系统大比拼
查看>>
Jira Epic在完成状态时,如何让Epic在Scrum面板待办事项中不显示?
查看>>
整理一下Entity Framework的查询
查看>>
添加引号的 java 正则表达式5
查看>>
关于IDEA不能实时编译的一个临时解决办法。。。。
查看>>
smali文件对比java文件(转)
查看>>
SpringBoot2.0 配置Log4j2记录日志
查看>>
JS 获取 CSS 样式
查看>>
使用myeclipse的反向工程来生成相应的hibernate映射文件和POJO类
查看>>
正则 基本用法
查看>>
产品上线前如何搭建团队运营体系
查看>>
Android 4.2蓝牙介绍
查看>>
Google资深工程师详解Android的系统架构
查看>>
我的友情链接
查看>>