WA 70pts 求调
查看原帖
WA 70pts 求调
908514
DHT666楼主2025/1/6 15:51
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 5e3 + 10, M = 5e6 + 10;

struct node {
	int l, r, p;
} a[N];

int n, m;
int b[N * 2], idx;
int fa[M];

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

void merge(int x, int y) {
	fa[find(x)] = find(y);
}

int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= m; i++) {
		scanf("%d%d", &a[i].l, &a[i].r);
		a[i].l--;
		b[++idx] = a[i].l, b[++idx] = a[i].r;
		string x;
		cin >> x;
		if(x == "odd") a[i].p = 2;
	}

	sort(b + 1, b + 1 + idx);
	n = unique(b + 1, b + 1 + idx) - b;

	for(int i = 1; i <= n * 2; i++) {
		fa[i] = i;
	}

	for(int i = 1; i <= m; i++) {
		a[i].l = lower_bound(b + 1, b + 1 + n, a[i].l) - b;
		a[i].r = lower_bound(b + 1, b + 1 + n, a[i].r) - b;
		if(a[i].p == 2) {
			if(find(a[i].l) == find(a[i].r)) {
				printf("%d", i - 1);
				return 0;
			}
			merge(a[i].l, a[i].r + n);
			merge(a[i].l + n, a[i].r);
		} else {
			if(find(a[i].l) == find(a[i].r + n)) {
				printf("%d", i - 1);
				return 0;
			}
			merge(a[i].l, a[i].r);
			merge(a[i].l + n, a[i].r + n);
		}
	}

	printf("%d", m);

	return 0;
}

谢谢啦

2025/1/6 15:51
加载中...