70分TLE求条
查看原帖
70分TLE求条
487383
imnoob楼主2024/1/22 16:23

记录

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int t;
struct node
{
	int x, y, e;
}a[100010];
int cnt, n, f[100010], b[200010];
bool flag;
bool cmp(node xx, node yy)
{
	return xx.e > yy.e;
}
int findd(int xx)
{
	if(xx == f[xx])
	{
		return xx;
	}
	return findd(f[xx]);
}
int main()
{
	cin >> t;
	while(t--)
	{
		memset(a, 0, sizeof(a));
		memset(b, 0, sizeof(b));
		memset(f, 0 ,sizeof(f));
		cnt = 0;
		flag = true;
		cin >> n;
		for(int i = 1; i <= n; ++i)
		{
			cin >> a[i].x >> a[i].y >> a[i].e;
			b[++cnt] = a[i].x;
			b[++cnt] = a[i].y;
		}
		sort(b + 1, b + 2 * n + 1);
		cnt = unique(b, b + 2 * n + 1) - b;
		for(int i = 1; i <= n; ++i)
		{
			a[i].x = lower_bound(b + 1, b + cnt + 1, a[i].x) - b;
			a[i].y = lower_bound(b + 1, b + cnt + 1, a[i].y) - b;
		}
		for(int i = 1; i <= cnt; ++i)
		{
			f[i] = i;
		}
		sort(a + 1, a + n + 1, cmp);
		for(int i = 1, xx, yy; i <= n; ++i)
		{
			xx = findd(a[i].x);
			yy = findd(a[i].y);
			if(a[i].e)
			{
				f[xx] = yy;
			}
			else if(xx == yy)
			{
				cout << "NO" << '\n';
				flag = false;
				break;
			}
		}
		if(flag)
		{
			cout << "YES" << '\n';
		}
	}
	return 0;
}
2024/1/22 16:23
加载中...