黑暗爆炸 OJ AC 但洛谷 0 pts 求助!
查看原帖
黑暗爆炸 OJ AC 但洛谷 0 pts 求助!
554746
yiming564楼主2024/9/24 14:34

本人刚学 LCT,在 黑暗 BZOJ 上提交已经 AC,但在洛谷提交喜提 0 pts,代码如下:

#include <bits/extc++.h>

#define inline __always_inline
#define lson(u) (son[(u)][0])
#define rson(u) (son[(u)][1])
template <typename T> inline void read(T &x)
{
	char ch;
	for (ch = getchar(); !isdigit(ch); ch = getchar());
	for (x = 0; isdigit(ch); ch = getchar())	x = x * 10 + ch - '0';
}
const int MaxN = 5e4 + 5, MaxV = MaxN;

int fa[MaxV], son[MaxV][2], rev[MaxV], n;
inline bool is_root(int u) { return u != lson(fa[u]) && u != rson(fa[u]); }
inline bool get_id(int u) { return u == rson(fa[u]); }
inline void link(int p, int u, bool id) { fa[u] = p; if (p) son[p][id] = u; }
inline void push_rev(int u) { if (u) std::swap(lson(u), rson(u)), rev[u] ^= 1; }
inline void push_down(int u) { if (rev[u]) push_rev(lson(u)), push_rev(rson(u)), rev[u] = 0; }

void rotate(int u)
{
	int p = fa[u], g = fa[p], id = get_id(u);
	fa[u] = g; if (!is_root(p)) son[g][get_id(p)] = u;
	link(p, son[u][id ^ 1], id);
	link(u, p, id ^ 1);
}
int queue[MaxV], *tail = queue;
void splay(int u)
{
	for (int v = u; !is_root(v); v = fa[v]) *tail++ = fa[v];
	while (tail != queue) push_down(*--tail); push_down(u);
	for (int p = fa[u]; !is_root(u); rotate(u), p = fa[u])
		if (!is_root(p)) rotate(get_id(p) == get_id(u) ? p : u);
}
int access(int u)
{
	int prev;
	for (prev = 0; u; u = fa[prev = u])
		splay(u), rson(u) = prev; // used to push up here.
	return prev;	// prev have been splayed.
}
inline void make_root(int u) { push_rev(access(u)); }
int find_root(int u)
{
	for (u = access(u); lson(u); push_down(u)) u = lson(u);
	return splay(u), u;
}
inline void link(int u, int v) { make_root(u), splay(u), fa[u] = v; }
inline void cut(int u, int v) { make_root(u), access(v), splay(u), rson(u) = fa[v] = 0; }

int	m, u, v; char op;
int main()
{
	read(n), read(m);
	for (int i = 0; i < m; i++)
	{
		scanf("%c", &op), read(u), read(v);
		if (op == 'C') link(u, v);
		else if (op	== 'D') cut(u, v);
		else printf(find_root(u) == find_root(v) ? "Yes\n" : "No\n");
	}
	return 0;
}

洛谷还不让下载数据,搞得非常的玄学,求助各位大佬,给个 hack 也行,玄关。

2024/9/24 14:34
加载中...