MST:Conscription(POJ 3723)

题目大意:需要招募女兵和男兵,每一个人都的需要花费1W元的招募费用,但是如果有一些人之间有亲密的关系,那么就会减少一定的价钱,如果给出1~9999的人之间的亲密关系,现在要你求招募所有人的时候,最少的价格?
看似这一题要用到二分图,其实根本用不上,我们仔细想一下我们如果把所有的男和女都看成人的话,那么其实我们就是要求这些关系的最大值的负值(也就是最小生成树)
这样一看,这题其实很裸,要注意区分男和女就行(别搞错男女了,不然就RE了),男的点的位置就看成是女的总数+男的坐标就可以了额
#include <iostream>
#include <functional>
#include <algorithm>
#define MAX 20005
#define MAX_E 50005 using namespace std;
typedef int Position;
typedef struct _edge
{
int cost;
int from;
Position to;
}Edge_Set;
int fcomp(const void *a, const void *b)
{
return (*(Edge_Set *)a).cost - (*(Edge_Set *)b).cost;
} static Edge_Set Edge[MAX_E];
Position V_Set[MAX]; void Kruskal(const int, const int);
Position Find(Position);
bool If_Same(Position, Position);
void Union(Position, Position); int main(void)
{
int test_case, men_sum, women_sum, R_sum, cost_tmp;
Position from, to;
scanf("%d", &test_case); while (test_case--)
{
//这一题不用二分图的方法,直接上MST
scanf("%d%d%d", &women_sum, &men_sum, &R_sum);
for (int i = ; i < R_sum; i++)
{
scanf("%d%d%d", &from, &to, &cost_tmp);//男生的坐标要加上女生总数
Edge[i].from = from; Edge[i].to = to + women_sum; Edge[i].cost = -cost_tmp;//存负的
}
Kruskal(men_sum + women_sum, R_sum);
}
return ;
} Position Find(Position x)
{
if (V_Set[x] < )
return x;
else return V_Set[x] = Find(V_Set[x]);
} bool If_Same(Position x, Position y)
{
Position px, py;
px = Find(x); py = Find(y);
return px == py;
} void Union(Position x, Position y)
{
Position px, py;
px = Find(x); py = Find(y); if (px != py)
{
if (V_Set[px] < V_Set[py])
{
V_Set[px] += V_Set[py];
V_Set[py] = px;
}
else
{
V_Set[py] += V_Set[px];
V_Set[px] = py;
}
}
} void Kruskal(const int n, const int edge_sum)
{
//初始化查并集
fill(V_Set, V_Set + n, -);
qsort(Edge, edge_sum, sizeof(Edge_Set), fcomp);//把边排个大小 Edge_Set e;
long long ans = ;
for (int i = ; i < edge_sum; i++)
{
e = Edge[i];
if (!If_Same(e.from, e.to))
{
Union(e.from, e.to);
ans += e.cost;
}
}
printf("%lld\n", (long long)n * + ans);
}

MST:Conscription(POJ 3723)的更多相关文章
- Conscription(POJ 3723)
原题如下: Conscription Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16584 Accepted: 57 ...
- Day5 - D - Conscription POJ - 3723
Windy has a country, and he wants to build an army to protect his country. He has picked up N girls ...
- POJ 3723 Conscription MST
http://poj.org/problem?id=3723 题目大意: 需要征募女兵N人,男兵M人,没征募一个人需要花费10000美元,但是如果已经征募的人中有一些关系亲密的人,那么可以少花一些钱, ...
- poj - 3723 Conscription(最大权森林)
http://poj.org/problem?id=3723 windy需要挑选N各女孩,和M各男孩作为士兵,但是雇佣每个人都需要支付10000元的费用,如果男孩x和女孩y存在亲密度为d的关系,只要他 ...
- POJ 3723 Conscription(并查集建模)
[题目链接] http://poj.org/problem?id=3723 [题目大意] 招募名单上有n个男生和m个女生,招募价格均为10000, 但是某些男女之间存在好感,则招募的时候, 可以降低与 ...
- POJ 3723 Conscription 最小生成树
题目链接: 题目 Conscription Time Limit: 1000MS Memory Limit: 65536K 问题描述 Windy has a country, and he wants ...
- POJ 3723 Conscription
Conscription Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6325 Accepted: 2184 Desc ...
- POJ 3723 Conscription (Kruskal并查集求最小生成树)
Conscription Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14661 Accepted: 5102 Des ...
- 【POJ - 3723 】Conscription(最小生成树)
Conscription Descriptions 需要征募女兵N人,男兵M人. 每招募一个人需要花费10000美元. 如果已经招募的人中有一些关系亲密的人,那么可以少花一些钱. 给出若干男女之前的1 ...
随机推荐
- Cocos2d-X3.0 刨根问底(二)----- 从HelloWorld开始
小鱼习惯直接从代码实例来学习一套成型的引擎库. 运行cpp-empty-test 一个典型的HelloWorld程序翻看代码结构 看到了 main.h与main.cpp文件就从这里开始 #ifndef ...
- 洛谷P2024 食物链
挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...
- SQL增加、删除、更改表中的字段名
1. 向表中添加新的字段 ) not null 2. 删除表中的一个字段 delete table table_name column column_name 3. 修改表中的一个字段名 alter ...
- footable动态载入数据
footable_redraw事件 $('#scan').on('click',function(){ var html = '<tr><td>mayidudu</td& ...
- PHP中应用GD2函数在图像上添加文字
<?php header("Content-type:text/html;charset=utf-8"); header("Content-type:image/g ...
- linux经典命令学习
本文介绍Linux系统的若干经典命令的常用方法. (一)grep 主要用于搜索文件内容,查看是否跟要求的pattern相匹配. 1.grep -l 'boss' * 显示所有包含boss ...
- SCI完全攻略:从构思到发表
- MySQL导出数据库
MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd D:\Program\MySQL\MySQL Server 5.0 ...
- thinkphp-2
php的跨文件变量? global $g是一个脚本文件中, 函数外部的变量在函数中要使用时的 全局变量 $_GET等是所谓的"超全局变量", 但仍然是只能在一个脚本的范围内使用 要 ...
- PHP初学者必须掌握的10个知识点
这里总结了PHP初学者容易感到困惑的10个问题,供大家参考.1.页面之间无法传递变量get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用1 ...