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 (并查集)相关推荐

  1. A Bug‘s Life POJ 2492 加权并查集

    A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...

  2. Poj(1703),种类并查集

    题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...

  3. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  4. poj 1182 食物链 并查集

    转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...

  5. poj 1703(种类并查集)

    题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...

  6. POJ 3723 - Conscription ( 最大权森林 / 最小生成树 )

    题意 挑选N个女兵,M个男兵,雇佣每个人都需要支付10000元的费用,如果男a和女b存在亲密度d,只要他们其中有一个已经被选中,那么在选另一个人需要的费用为100000-d,给定R个关系,输出一个最低 ...

  7. poj 1611 TheSuspects 并查集 连通图

    题意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数. Input: 输入文 ...

  8. poj 2236 WirelessNetwork 并查集

    题意: 有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能.若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置, ...

  9. C - BLG POJ - 1417 种类并查集加dp(背包)

    思路:刚看这道题感觉什么都不清楚,人物之间的关系一点也看不出来,都不知道怎么写,连并查集都没看出来,但是你可以仔细分析一下,当输入字符串为"yes"的时候,我们设输入的值为x和y, ...

最新文章

  1. SCOM发送邮件通知
  2. Object.create()方法
  3. mybatis中条件表达式if的test为字符串时值比较
  4. 我用代码来给你们分析一个赚钱的技巧
  5. SQL实现当前行等于前面两行数据之和
  6. C++ boost::upgrade_lock upgrade_to_unique_lock 升级锁 是什么 怎么用
  7. Kotlin的一点学习资源
  8. java jsp中文乱码怎么解决_JSP中文乱码问题全解决方案
  9. 将长方形转换为正方形
  10. 社交产品分析:共同看片,微光
  11. 传奇世界手游活人最多服务器,传奇世界手游那些不为人知小技巧分享
  12. 在线阅读.epub文件的网站
  13. meta20 无法安装 google play_【黑科技】安卓手机安装Google Play
  14. c语言void翻译,C语言中,void 怎么读?给个准却的中文翻译。
  15. 12、go语言的duck typing
  16. 带你走进 ERNIE
  17. [POI2013] MOR-Tales of seafaring
  18. Unity二维平面上物体的移动(十二)-抛物线推动力
  19. 从Carsim中获取轮胎侧偏刚度
  20. 社会财富分配问题模拟

热门文章

  1. CO葵花宝典-4.物料成本估算配置
  2. 记ThoughtWorks面试失败之旅
  3. Linux下使用parted对硬盘进行分区
  4. Java Socket实战之三:传输对象
  5. 更改开机默认不显示explorer.exe,直接启动自己写的EXE程序方法
  6. Linux下Tomcat添加为系统服务
  7. json和jsonp(json是目的,jsonp是手段)
  8. 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载【转】
  9. Mysql数据库常用操作整理
  10. 统一沟通-技巧-9-Lync 2010-Outlook 2010-自动配置-2-普通人员