题目链接:点击打开链接
解题思路:
根据相互之间的关系,可以转化一个无向图中最大权森林的问题。也就是把边权取反,然后用最小生成树求解。
本题用邻接表存储,Kruskal求最小生成树。
完整代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <set>
#include <vector>
#include <climits>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn = 500001;
struct edge
{
int u , v , cost;
};
int n , m , r;
int x[maxn] , y[maxn] , d[maxn];
bool cmp(const edge &e1 , const edge &e2)
{
return e1.cost < e2.cost;
}
edge es[maxn];
int V , E;
int f[maxn] , rank[maxn];
void init_union_find(int cnt)
{
for(int i =