hack 数据bug求助
查看原帖
hack 数据bug求助
759710
LuoFeng_Nanami楼主2025/1/1 21:08
//LuoFeng Nanami ver. 
#include<bits/stdc++.h>
#define ll long long
#define rll register ll
#define F(i, a, b) for(rll i = a; i <= b; i++)
#define Fdn(i, a, b) for(rll i = a; i >= b; i--)
#define pii pair<int, int>
#define fi first
#define se second
#define ld long double

using namespace std;

const int inf = 0x3f3f3f3f3f3f3f3f, mod = 1e9 + 7, _mod = 998244353;
const int maxn = 2e5 + 7, glz = 4e5 + 7;

int n, m, k;
vector<pii> Tree[maxn << 2];
int fa[maxn], h[maxn];
struct Stack { int u, v, add; } stk[maxn];
int top;
int ans[maxn];

inline void Modify(int p, int l, int r, int s, int t, pii v) {
	if(s <= l && r <= t) return Tree[p].push_back(v), void();
	int mid = (l + r) >> 1;
	if(s <= mid) Modify(p << 1, l, mid, s, t, v);
	if(mid < t) Modify(p << 1 | 1, mid + 1, r, s, t, v);
}

inline int Get(int x) { while(x ^ fa[x]) x = fa[x]; return x; }

inline void Merge(int u, int v) {
	u = Get(u), v = Get(v);
	if(h[u] < h[v]) swap(h[u], h[v]);
	stk[++top] = {u, v, h[u] == h[v]};
	fa[v] = u;
	if(h[u] == h[v]) h[u]++;
}

inline void Solve(int p, int l, int r) {
	int fl = 1, lst = top;
	for(pii tmp : Tree[p]) {
		int u = Get(tmp.fi), v = Get(tmp.se);
		if(u == v) { fl = 0; break; }
		Merge(tmp.fi, tmp.se + n); Merge(tmp.se, tmp.fi + n);
	}
	if(fl) {
		if(l == r) ans[l] = 1;
		else {
			int mid = (l + r) >> 1;
			Solve(p << 1, l, mid); Solve(p << 1 | 1, mid + 1, r);
		}
	}
	while(top > lst) {
		h[stk[top].u] -= stk[top].add;
		fa[stk[top].v] = stk[top].v;
		top--;
	}
}

signed main() {
//	freopen("glz.in", "r", stdin);
//	freopen("glz.out", "w", stdout);
	
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	
	cin >> n >> m >> k;
	F(i, 1, m) {
		int x, y, l, r; cin >> x >> y >> l >> r;
		Modify(1, 1, k, l + 1, r, {x, y});
	}
	F(i, 1, n << 1) fa[i] = i, h[i] = 1;
	Solve(1, 1, k);
	F(i, 1, k) cout << (ans[i] ? "Yes" : "No") << '\n'; 
	
	
    
	return 0;
}
2025/1/1 21:08
加载中...