#define _CRT_SECURE_NO_WARNINGS
/*
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
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std; const int maxn = + ;
const int maxR = ;
const int INF = ;
int par[maxn]; //父亲, 当par[x] = x时,x是所在的树的根
int Rank[maxn]; //树的高度
int N, M, R;
int V, E;
int x[maxR], y[maxR], d[maxR]; struct edge
{
int u, v, cost;
edge(int u = , int v = , int cost = ) : u(u), v(v), cost(cost) {}
}; bool comp(const edge& e1, const edge& e2) {
return e1.cost < e2.cost;
} edge es[maxn]; //并查集实现-高效的判断是否属于同一个连通分量。
void init_union_find(int n);
int find(int x);
void unite(int x, int y);
bool same(int x, int y); //最小生成树
void input();
int kruskal(); //最小生成树算法
//最大权森林
void solve(); //初始化n个元素
void init_union_find(int n)
{
for (int i = ; i < n; i++) {
par[i] = i;
Rank[i] = ;
}
} //查询树的根
int find(int x) {
if (par[x] == x) {
return x;
}
else {
return par[x] = find(par[x]);
}
} //合并x和y所属集合
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return; if (Rank[x] < Rank[y]) {
par[x] = y;
}
else {
par[y] = x;
if (Rank[x] == Rank[y]) Rank[x]++; //如果x,y的树高相同,就让x的树高+1
}
} //判断x和y是否属于同一个集合
bool same(int x, int y) {
return find(x) == find(y);
} void input()
{
scanf("%d%d%d", &N, &M, &R);
for (int i = ; i < R; i++) {
scanf("%d%d%d", &x[i], &y[i], &d[i]);
}
} int kruskal()
{
sort(es, es + E, comp); //按照edge.cost的顺序从小到大排序
init_union_find(V); //将并查集初始化
int res = ;
for (int i = ; i < E; i++) {
edge e = es[i];
if (!same(e.u, e.v)) {
unite(e.u, e.v);
res += e.cost;
}
}
return res;
} void solve()
{
V = N + M;
E = R;
for (int i = ; i < R; i++) {
es[i] = edge(x[i], N + y[i], -d[i]);
}
int res = kruskal();
//cout << "Debug" << res << endl;
cout << * (N + M) + res << endl; //kruskal结果是-d[i]
} int main()
{
input();
solve();
return ;
}

最新文章

  1. c# webapi发布到windows server 2008 r2 iis上提示404错误
  2. 从Windows XP系统迁移到Windows 7,Windows 8开始
  3. SQL语句调优 - 索引上的数据检索方法
  4. xcode报错:Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/b
  5. 20141017--循环语句whlie,do
  6. easyui LinkButton
  7. java 方法重载overload
  8. 工具(3): 转换Excel表格到MarkDown:exceltk
  9. Spring 的 AOP 进行事务管理的一些问题
  10. MVC架构介绍-Model的开发
  11. Linux 安装SSH
  12. Spring注解之 @SuppressWarnings注解
  13. RDIFramework.NET V2.7 Web版本号升手风琴+树型文件夹(2级+)方法
  14. Web API源码剖析之HttpServer
  15. Eclipse Android 代码自动提示功能 +导入 epf
  16. 在Centos7下安装与部署.net core
  17. maven项目Java resources 上面有个红叉但是代码里面并没有什么报错
  18. java中final修饰符的使用
  19. Oracle 常用
  20. Angular中的$cacheFactory的作用和用法

热门文章

  1. Chrome 启动参数列表
  2. Vue 初识Vue
  3. centos mpeg acc 解码器安装
  4. delphi property read writer 如何使用
  5. Omni(USDT)钱包安装(ubuntu)
  6. Spark_RDD之基本RDD操作
  7. Cuba获取属性文件中的配置
  8. CSS覆盖公共样式中的某个属性
  9. java 字符串的运算公式直接转计算结果
  10. MT【32】内外圆(Apollonius Circle)的几何证明