第一道紫题86pts求助玄关!
查看原帖
第一道紫题86pts求助玄关!
999658
talkwithc楼主2024/9/15 22:36

#5 WA

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;

const int xx = 100010;

struct edge
{
	int u, v, d;
}a[xx], b[xx];//shizi,水泥;

vector<edge> p;

int t[xx];
int find(int x) { return t[x] == x ? x : t[x] = find(t[x]); }

int n, m, k, u, v, d, cnt1, cnt2, cnt;
int main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	cin >> n >> m >> k;
	for (int i = 1; i <= m; ++i)
	{
		cin >> u >> v >> d;
		if (d == 0) a[++cnt1] = { u,v,d };
		else b[++cnt2] = { u,v,d };
	}

	//if (k > cnt1) { cout << "no solution"; return 0; }

	for (int i = 1; i <= n; ++i) t[i] = i;

	for (int i = 1; i <= cnt1; ++i)
	{
		int x = find(a[i].u), y = find(a[i].v);
		if (x != y)
		{
			t[y] = x;

			p.push_back(a[i]);

			++cnt;
			if (cnt == k) break;
		}
	}

	if (cnt < k) { cout << "no solution"; return 0; }

	for (int i = 1; i <= cnt2; ++i)
	{
		int x = find(b[i].u), y = find(b[i].v);
		if (x != y)
		{
			t[y] = x;

			p.push_back(b[i]);

			++cnt;
			if (cnt == n - 1) break;
		}
	}

	if (cnt < n - 1) { cout << "no solution"; return 0; }

	if (find(1) != find(n)) cout << "no solution";
	else
	{
		for (int i = 0; i < p.size(); ++i)
		{
			printf("%d %d %d\n", p[i].u, p[i].v, p[i].d);
		}
	}

	return 0;
}
2024/9/15 22:36
加载中...