10 pts WA & TLE 求调
查看原帖
10 pts WA & TLE 求调
908514
DHT666楼主2025/2/5 20:15
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

typedef long long LL;

const int N = 1e6 + 10, M = 1e6 + 10, Log_N = 26;

struct E {
	int u, v;
} edge[M];

int n, m, q;
int e[M], ne[M], p[N], h[N], rh[N], idx;
int dfn[N], low[N], num;
int stk[N], top;
int id[N], cnt;
char res[N];
int fa[N][Log_N], dep[N];
int a[N];

void add(int x, int y, int z, int h[]) {
	e[++idx] = y;
	p[idx] = z;
	ne[idx] = h[x];
	h[x] = idx;
}

void tarjan(int u, int fath) {
	low[u] = dfn[u] = ++num;
	stk[++top] = u;
	for(int i = h[u]; i; i = ne[i]) {
		int v = e[i];
		if(v == fath) continue;
		if(!dfn[v]) {
			tarjan(v, u);
			low[u] = min(low[u], low[v]);
		} else {
			low[u] = min(low[u], dfn[v]);
		}
	}
	if(low[u] == dfn[u]) {
		int y;
		cnt++;
		do {
			y = stk[top--];
			id[y] = cnt;
		} while(y != u);
	}
}

void dfs(int u, int fath) {
	for(int i = rh[u]; i; i = ne[i]) {
		int v = e[i];
		if(v == fath) continue; 
		dfs(v, u);
		a[u] += a[v];
		if(a[v] == 1) {
			if(id[e[p[i]]] == u) {
				res[p[i]] = 'R';
			} else {
				res[p[i]] = 'L';
			}
		} 
		if(a[v] == -1) {
			if(id[e[p[i]]] == u) {
				res[p[i]] = 'L';
			} else {
				res[p[i]] = 'R';
			}
		}
	}
}

int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= m; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		add(x, y, 0, h), add(y, x, 0, h);
	}

	scanf("%d", &q);
	for(int i = 1; i <= q; i++) {
		scanf("%d%d", &edge[i].u, &edge[i].v);
	}
	
	for(int i = 1; i <= n; i++) {
		if(!dfn[i]) {
			tarjan(i, 0);
		}
	}
	
	for(int i = 1; i <= n; i++) {
		for(int j = h[i]; j; j = ne[j]) {
			int v = e[j];
			int x = id[i], y = id[v];
			if(x != y) {
				add(x, y, (j & 1) ? j : (j - 1), rh);
			}
		}
	}
	
	for(int i = 1; i <= q; i++) {
		if(id[edge[i].u] == id[edge[i].v]) continue;
		a[id[edge[i].u]] += 1, a[id[edge[i].v]] -= 1;
	}
	
	for(int i = 1; i <= 2 * m; i++) {
		res[i] = 'B';
	}
	
	dfs(1, 0);
	
	for(int i = 1; i <= 2 * m; i += 2) {
		printf("%c", res[i]);
	}

	return 0;
}

使用了树上差分,可能是边的编号转化问题,求调,求 hack。

2025/2/5 20:15
加载中...