关于此题数据的无解情况...蒟蒻代码忘记判断无解仍然AC???
查看原帖
关于此题数据的无解情况...蒟蒻代码忘记判断无解仍然AC???
90027
fanypcd楼主2020/8/16 22:37

啊这

代码:

#include<bits/stdc++.h>
using namespace std;
int n, m, k, fa[1000005], cnt = 0;
struct node
{
	int u, v;
	int w;
};
node e[1000005];
void add(int x, int y, int z)
{
	e[++cnt].u = x;
	e[cnt].v = y;
	e[cnt].w = z;
	return;
}
int cmp(node a, node b)
{
	return a.w < b.w;
}
int getfa(int x)
{
	if(x == fa[x])
	{
		return x;
	}
	else
	{
		fa[x] = getfa(fa[x]);
	}
	return fa[x];
}
void merge(int x, int y)
{
	int xx = getfa(x);
	int yy = getfa(y);
	fa[xx] = yy;
	return;
}
int kruskal()
{
	int tot = 0;
	int ret = 0;
	sort(e + 1, e + cnt + 1, cmp);
	for(int i = 1; i <= cnt; i++)
	{
		int uu = getfa(e[i].u);
		int vv = getfa(e[i].v);
		if(uu != vv)
		{
			fa[uu] = vv;
			ret += e[i].w;
			tot++;
		}
		if(tot == n - k)
		{
			return ret;
		}
	}
}
int main()
{
	//ios::sync_with_stdio(false);
	//cin.tie(0);
	//cout.tie(0);
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++)
	{
		fa[i] = i;
	}
	int a, b, c;
	for(int i = 1; i <= m; i++)
	{
		cin >> a >> b >> c;
		add(a, b, c);
	}
	/*for(int i = 1; i <= n; i++)
	{
		add(0, i, 0);
	}*/
	int ans = kruskal();
	cout << ans;
	return 0;
}

2020/8/16 22:37
加载中...