社区讨论

86求调

P3623[APIO2008] 免费道路参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhz4iu4b
此快照首次捕获于
2025/11/15 01:20
4 个月前
此快照最后确认于
2025/11/16 14:02
4 个月前
查看原帖
#5 WA了
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct NODE
{
	int u,v,w;
	bool operator <(const NODE t) const
	{
		return w<t.w;
	}
} a[100005];
int n,m,k;
int fa[20005];
vector<int> ans;
int find(int x)
{
	if(x!=fa[x]) return fa[x] = find(fa[x]);
	return x;
}
signed main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++) cin>>a[i].u>>a[i].v>>a[i].w;
	for(int i=1;i<=n;i++) fa[i] = i;
	int cnt = 0;
	for(int i=1;i<=m;i++)
	{
		int x = find(a[i].u);
		int y = find(a[i].v);
		if(x!=y)
		{
			fa[x] = y;
			cnt++;
		}
	}
	if(cnt<n-1)
	{
		cout<<"no solution";
		return 0;
	}
	sort(a+1,a+1+m);
	for(int i=1;i<=n;i++) fa[i] = i;
	cnt = 0;
	for(int i=1;i<=m;i++)
	{
		int x = find(a[i].u);
		int y = find(a[i].v);
		if(x!=y)
		{
			if(!a[i].w)
			{
				if(k) 
				{
					k--;
					fa[x] = y;
					cnt++;
					ans.push_back(i);
				}
			}
			else 
			{
				fa[x] = y;
				cnt++;
				ans.push_back(i);
			}
		}
	}
	if(k||cnt<n-1) cout<<"no solution";
	else 
	{
		for(auto it:ans)
		{
			cout<<a[it].u<<" "<<a[it].v<<" "<<a[it].w<<"\n"; 
		}
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...