Tarjan Subtask #1WA on #1
查看原帖
Tarjan Subtask #1WA on #1
904938
pb0000楼主2024/7/9 16:57
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m, s;
int f[N];
vector<pair<int, int>> g[N];
int e[N], ne[N], h[N], idx;
void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
bool vis[N];
int ans[N];
int find(int x)
{
    if (f[x] == x) return x;
    return f[x] = find(f[x]);
}
void tarjan(int u)
{
    vis[u] = 1;
    for (int i = h[u]; ~i; i = ne[i])
    {
        if (vis[e[i]]) continue;
        tarjan(e[i]);
        f[find(e[i])] = find(u);
        // vis[e[i]] = true;
    }
    // cout << 1;
    for (auto v : g[u])
     if(vis[v.first]) ans[v.second] = find(v.first);
}
int main()
{
    // freopen("P3379_1.?in", "r", stdin);
    ios ::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m >> s;
    for (int i = 1; i <= n; i ++) f[i] = i, h[i] = -1;
    for (int i = 1; i < n; i ++)
    {
        int u, v;
        cin >> u >> v;
        add(u, v), add(v, u);
        // cout << 1;
    }
    for (int i = 1; i <= n; i ++)
    {
        int u, v;
        cin >> u >> v;
        g[u].push_back(make_pair(v, i));
        g[v].push_back(make_pair(u, i));
    }
    // vis[s] = true;
    // cout << 1;
    tarjan(s);
    for (int i = 1; i <= m; i ++) cout << ans[i] << "\n";
    return 0;
}
2024/7/9 16:57
加载中...