萌新刚学OI,Tarjan 0pts求助
查看原帖
萌新刚学OI,Tarjan 0pts求助
764442
__zhuruirong__楼主2024/1/5 17:48

全RE

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e6 + 10;
vector<int> E1[N], E2[N], id[N];
int n, m, s, vis[N], fa[N], ans[N];

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

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

void Tarjan(int x) {
	cout << x << endl;
	vis[x] = 1;
	for(int i = 0; i < E1[x].size(); i++) {
		if(vis[E1[x][i]]) 
			continue;
		Tarjan(E1[x][i]);
		fa[E1[x][i]] = x;
	}
	for(int i = 0; i < E2[x].size(); i++) 
		if(vis[E2[x][i]] == 2)
			ans[id[x][i]] = find(E2[x][i]);
	vis[x] = 2;
}

signed main() {
//	ios::sync_with_stdio(0);
//	cin.tie(0); cout.tie(0);
	freopen("in.in", "r", stdin);
	freopen("out.out", "w", stdout);
	cin >> n >> m >> s;
	for(int i = 1; i < n; i++) {
		int u, v;
		cin >> u >> v;
		E1[u].push_back(v);
		E1[v].push_back(u);
	}
	for(int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		E2[u].push_back(v);
		E2[v].push_back(u);
		id[u].push_back(i);
		id[v].push_back(i); 
	} 
	init(n);
	Tarjan(s);
	for(int i = 1; i <= m; i++)
		cout << ans[i] << endl; 

	return 0;
}


2024/1/5 17:48
加载中...