WA 50pts 求调
查看原帖
WA 50pts 求调
524911
PassName楼主2023/12/21 20:26

RT,代码如下

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n' 

using namespace std;

const int N = 1e6 + 5;
const int M = N << 2;

int T;
int n, m;
int fa[N];
int idx = 0;
int book[M], b[M];
bool flag;

struct node
{
    int x, y;
	int e;
}f[N];

bool cmp(node a, node b)
{
	return a.e > b.e;
}

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

int query(int x)
{
	return lower_bound(b + 1, b + m + 1, x) - b;
}

signed main()
{
    cin >> T;
    while (T--)
	{
        memset(book, 0, sizeof book);
		idx = 0;
		flag = 1;
		
        cin >> n;
        for (rint i = 1; i <= n; i++)
		{
            cin >> f[i].x >> f[i].y >> f[i].e;
            book[++idx] = f[i].x;
			book[++idx] = f[i].y;
        } 
        
        for (rint i = 1; i <= idx; i++)
        {
			b[i] = book[i];
		}
		sort(b + 1, b + idx + 1);
		int m = unique(b + 1, b + idx + 1) - b - 1;
        
        sort(f + 1, f + n + 1, cmp);
        
        for (rint i = 1; i <= m; i++)
		{
			fa[i] = i;
		} 
		
        for (rint i = 1; i <= n; i++)
		{
            int a = query(f[i].x);
			int b = query(f[i].y);
            
			int x = find(a);
			int y = find(b);
            
			if (f[i].e == 1) fa[x] = y;
			
            else if (x == y)
			{
                puts("NO");
				flag = 0;
				break;
            } 
        }
        if(flag) puts("YES");
    }
    return 0;
}
2023/12/21 20:26
加载中...