题目描述

温迪有一个国家,他想建立一支军队来保护他的国家。他收留了N个女孩和M个男孩,想把她们收留成他的士兵。征兵无特权,必须交纳一万元。女孩和男孩之间有一些关系,温迪可以利用这些关系来降低他的成本。如果X女孩和Y男孩有D关系,并且其中一个已经被收集,Windy可以用10000-D人民币收集另一个。现在考虑到男孩和女孩之间的所有关系,你的任务是找到风必须支付的最少的钱。注意,收集一个士兵时只能使用一个关系。Input

输入的第一行是测试用例的数量。 每个测试用例的第一行包含三个整数,n、m和r。 然后R行,每个包含三个整数Xi,Yi和DI。 每个测试用例前都有一个空白行。

1 ≤ NM ≤ 10000
0 ≤ R ≤ 50,000
0 ≤ xi < N
0 ≤ yi < M
0 < di < 10000

Output

For each test case output the answer in a single line.

Sample Input

2

5 5 8
4 3 6831
1 3 4583
0 0 6592
0 1 3063
3 3 4975
1 3 2049
4 2 2104
2 2 781 5 5 10
2 4 9820
3 2 6236
3 1 8864
2 4 8326
2 0 5156
2 0 1463
4 1 2439
0 4 4373
3 4 8889
2 4 3133

Sample Output

71071
54223
代码如下,参考挑战程序设计竞赛
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define ull unsigned long long
#define ll long long
const int maxn=5e4+;
int par[maxn];
int rank1[maxn],n,m,r; void init(int n) //初始化
{
for(int i=;i<n;i++)
{
par[i]=i;
rank1[i]=;
}
}
int find(int x)
{
if(par[x]==x)
{
return x;
}
else
{
return par[x]=find(par[x]);
}
}
void unite(int x,int y)
{
x=find(x);
y=find(y);
if(x==y)
return ;
if(rank1[x]<rank1[y])
{
par[x]=y;
}
else
{
par[y]=x;
}
if(rank1[x]==rank1[y])
rank1[x]++;
}
struct edge{
int x,y,cost;
}e[];
bool cmp(const edge e1,const edge e2)
{
return e1.cost<e2.cost;
}
ll kruskal()
{
ll res=;
sort(e+,e+r+,cmp);
for(int i=;i<=r;i++)
{
edge e1=e[i];
if(find(e1.x)!=find(e1.y))
{
unite(e1.x,e1.y);
res=res+e1.cost;
}
}
return res;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&r);
init(n+m);
for(int i=;i<=r;i++)
{
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].cost);
e[i].cost=-e[i].cost;
e[i].y=e[i].y+n;
}
printf("%lld\n",10000LL*(n+m)+kruskal());
}
return ;
}

最新文章

  1. C Primer Plus_第9章_函数_编程练习
  2. Java之数组了解
  3. 【Python全栈笔记】03 [模块二] 16-17 Oct Set 集合,三目运算
  4. poj 1611 The Suspects 并查集
  5. c#是否参入中间变量交换变量的几种方法
  6. Selenium2学习-008-WebUI自动化实战实例-006-易迅登录之 frame 处理
  7. 关于 xcode 工程编译报错 undefined symbol _res_9_init的解决办法
  8. 洛谷P1198 [JSOI2008]最大数
  9. 栈中的push实现
  10. Visual Assist安装、破解方法
  11. 在游戏中使用keybd_event的问题
  12. 实用的两款jquery树形tree插件
  13. 设计模式 单例模式(Singleton) [ 转载2 ]
  14. ES6小点心之通用弹窗
  15. RowKey设计之单调递增行键/时序数据
  16. poj 3694 Network 【Tarjan】+【LCA】
  17. c++11并发机制
  18. Ubunt 安装mysql
  19. POJ 1243 One Person
  20. LINUX 操作记录到syslog,并发送到syslog服务器上

热门文章

  1. href的几个特殊值
  2. dotnetcore3.1 WPF 中使用依赖注入
  3. C# NewtonJson Serialize and deserialize
  4. Spark应用开发调优要点总结
  5. Mac保留Python2安装Python3(Anaconda3)
  6. MySQL数据库的两种连接方式:TCP/IP和Socket
  7. mysql常见问题解决方案
  8. C语言简单编译预处理-笔记
  9. visual studio2010编译过程中出现COFF文件损坏的原因和方法总结
  10. qt creator源码全方面分析(2-4)