C++求助CF350B
  • 板块学术版
  • 楼主Ian_NIE
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/11 22:00
  • 上次更新2024/3/12 12:51:44
查看原帖
C++求助CF350B
602171
Ian_NIE楼主2024/3/11 22:00
#include <iostream>
#include <vector>
#define int long long
using namespace std;

int n, x, ans, ob[100005], t[100005], des[100005];
bool vis[100005];
vector<int> path, anspath;

void dfs(int x, int dep)
{
    if(dep > ans) ans = dep, anspath = path;
    int now = des[x];
    if(now != 0 && !vis[now] && t[now] == 1)
        vis[now] = true, path.push_back(now), dfs(now, dep + 1), path.pop_back(), vis[now] = false;
    return ;
}

signed main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> ob[i];
        if(ob[i] == 1) vis[i] = true;
    }
    for(int i = 1; i <= n; i++)
        cin >> x, t[x]++, des[i] = x;
    for(int i = 1; i <= n; i++)
        if(vis[i])
            path.push_back(i), dfs(i, 1), path.pop_back();
    cout << anspath.size() << endl;
    for(int i = anspath.size() - 1; i >= 0; i--)
        cout << anspath[i] << ' ';
    cout << endl;

    return 0;
}

TLE on #10

2024/3/11 22:00
加载中...