求助此存图方式如何判断联通(用dfs)
查看原帖
求助此存图方式如何判断联通(用dfs)
727008
lwx20211103楼主2023/7/3 22:48


#include <bits/stdc++.h>
using namespace std;

struct graph
{
	int u, v, c;
} gra[214514];

int fa[214514], tot, sum;
int n, m;

bool cmp(graph a, graph b)
{
	return a.c < b.c;
}

int _find(int x)
{
	return (x == fa[x] ? x : fa[x] = _find(fa[x]));
}

void _merge(int u, int v)
{
	int x = _find(u), y = _find(v);
	if (x != y)
		fa[x] = y;
}

void kru()
{	
	for (int i = 1; i <= m; i++)
	{
		int a = _find(gra[i].u), b = _find(gra[i].v);
		if (a == b) continue;
		_merge(a, b);
		sum += gra[i].c;
		tot++;
		if (tot == n - 1) return;
	}	
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		int u, v, c;
		cin >> u >> v >> c;
		gra[i].u = u, gra[i].v = v, gra[i].c = c;
	}
	for (int i = 1; i <= n; i++)
	{
		fa[i] = i;
	}
	sort(gra + 1, gra + 1 + m, cmp);
	kru();
	cout << sum;
	return 0;
}

结构体遍历图懵逼中。

2023/7/3 22:48
加载中...