社区讨论

50分求调!!悬 @yangpafan -一关

P1955[NOI2015] 程序自动分析参与者 4已保存回复 15

讨论操作

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

当前回复
15 条
当前快照
1 份
快照标识符
@lyp6idrg
此快照首次捕获于
2024/07/17 09:43
2 年前
此快照最后确认于
2024/07/17 10:47
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 5e5;
int fa[N], b[N];
map<int, int> mp;
struct node{
	int x, y, e;
} a[N];
bool cmp(node a, node b)
{
	return a.e > b.e;
}
int find(int x)
{
	if (fa[x] == x)
	{
		return x;
	}
	return fa[x] = find(fa[x]);
}

signed main()
{
	ios::sync_with_stdio();
	cin.tie(0);cout.tie(0);
	int T;
	cin >> T;
	while (T--)
	{
		int n;
		mp.clear();
		cin >> n;
		int tot = 0;
		for (int i = 0; i <= n; i++)
		{
			fa[i] = i;
		}
		for (int i = 1; i <= n; i++)
		{
			cin >> a[i].x >> a[i].y >> a[i].e;
			b[++tot] = a[i].x;
			b[++tot] = a[i].y;
		}
		sort(b + 1, b + 1 + tot);
		int cnt = 0;
		for (int i = 1; i <= n; i++)
		{
			if (b[i] != b[i-1])
			{
				mp[b[i]] = ++cnt;
			}
		}
		for (int i = 1; i <= n; i++)
		{
			a[i].x = mp[a[i].x];
			a[i].y = mp[a[i].y];
		}
		sort(a + 1, a + 1 + n, cmp);
		bool flag = true;
		for (int i = 1; i <= n; i++)
		{
			if (a[i].e)
			{
				fa[find(a[i].x)] = find(a[i].y);
			}
			else
			{
				if (find(a[i].x) == find(a[i].y))
				{
					flag = false;
					break;
				}
			}
		}
		if (flag)
		{
			cout << "YES\n";
		}
		else
		{
			cout << "NO\n";
		}
	} 
	return 0;
} 
@ChenJiaMing110122
@liwenxi114514
@yangpafan

回复

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

正在加载回复...