poj 3723 Conscription (并查集)
1 首先我们应该区分开男孩和女孩,只要将男孩的编号加上女孩的个数n,这样就可以做到男孩和女孩的编号是不同的。
2 题目中说了如果两个人有关系,并且其中一个人已经被选了那么选择另外一个人的时候只要10000-d即可。所以这就涉及到了两个人的关系问题,那么自然的想到了并查集来保存关系图。所以这n+m个人最后就可以被分到s个集合里面,每一个集合里面的人都是有关系的。那么这样我们只要求出s个集合的最小生成树相加,然后在加上s*10000(没有关系的时候选择一个人要10000),即为最后的答案。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define max 50005
using namespace std;
int pre[20010],n,m,r,ans;
struct edge
{int u,v,w;
}e[max];
int find(int x)
{int r=x;while(pre[r]!=r)r=pre[r];int i,j=x;while(j!=r){i=pre[j];pre[j]=r;j=i;}return r;
}
bool cmp(struct edge a,struct edge b)
{return a.w<b.w;
}
int dkstl()
{for(int i=0;i<m+n;++i)pre[i]=i;int x,y;sort(e,e+r,cmp);for(int i=0;i<r;++i){x=find(e[i].u);y=find(e[i].v);if(x!=y){ans+=e[i].w;pre[x]=y;}}/* sort(pre,pre+2*n);//waint ant=1;for(int i=1;i<2*n;++i){if(pre[i]!=pre[i-1])ant++;}*/int d[20010],ant=0;memset(d,0,sizeof(d));for(int i=0;i<n+m;++i){x=find(i);if(!d[x]){ant++;d[x]=1;}}cout<<10000*ant+ans<<endl;return 0;
}
int main()
{int t;cin>>t;while(t--){int u,v,w;cin>>n>>m>>r;for(int i=0;i<r;++i){scanf("%d %d %d",&u,&v,&w);e[i].u=u;e[i].v=v+n;e[i].w=10000-w;}ans=0;dkstl();}return 0;
}
poj 3723 Conscription (并查集)相关推荐
- A Bug‘s Life POJ 2492 加权并查集
A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...
- Poj(1703),种类并查集
题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- poj 1182 食物链 并查集
转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...
- poj 1703(种类并查集)
题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...
- POJ 3723 - Conscription ( 最大权森林 / 最小生成树 )
题意 挑选N个女兵,M个男兵,雇佣每个人都需要支付10000元的费用,如果男a和女b存在亲密度d,只要他们其中有一个已经被选中,那么在选另一个人需要的费用为100000-d,给定R个关系,输出一个最低 ...
- poj 1611 TheSuspects 并查集 连通图
题意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数. Input: 输入文 ...
- poj 2236 WirelessNetwork 并查集
题意: 有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能.若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置, ...
- C - BLG POJ - 1417 种类并查集加dp(背包)
思路:刚看这道题感觉什么都不清楚,人物之间的关系一点也看不出来,都不知道怎么写,连并查集都没看出来,但是你可以仔细分析一下,当输入字符串为"yes"的时候,我们设输入的值为x和y, ...
最新文章
- SCOM发送邮件通知
- Object.create()方法
- mybatis中条件表达式if的test为字符串时值比较
- 我用代码来给你们分析一个赚钱的技巧
- SQL实现当前行等于前面两行数据之和
- C++ boost::upgrade_lock upgrade_to_unique_lock 升级锁 是什么 怎么用
- Kotlin的一点学习资源
- java jsp中文乱码怎么解决_JSP中文乱码问题全解决方案
- 将长方形转换为正方形
- 社交产品分析:共同看片,微光
- 传奇世界手游活人最多服务器,传奇世界手游那些不为人知小技巧分享
- 在线阅读.epub文件的网站
- meta20 无法安装 google play_【黑科技】安卓手机安装Google Play
- c语言void翻译,C语言中,void 怎么读?给个准却的中文翻译。
- 12、go语言的duck typing
- 带你走进 ERNIE
- [POI2013] MOR-Tales of seafaring
- Unity二维平面上物体的移动(十二)-抛物线推动力
- 从Carsim中获取轮胎侧偏刚度
- 社会财富分配问题模拟
热门文章
- CO葵花宝典-4.物料成本估算配置
- 记ThoughtWorks面试失败之旅
- Linux下使用parted对硬盘进行分区
- Java Socket实战之三:传输对象
- 更改开机默认不显示explorer.exe,直接启动自己写的EXE程序方法
- Linux下Tomcat添加为系统服务
- json和jsonp(json是目的,jsonp是手段)
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载【转】
- Mysql数据库常用操作整理
- 统一沟通-技巧-9-Lync 2010-Outlook 2010-自动配置-2-普通人员