AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

Codeforces 1941G. Rudolf and Subway    原题链接    中等

作者: 作者的头像   偷月亮的喵 ,  2025-05-10 19:07:51 · 安徽 ,  所有人可见 ,  阅读 2


0


#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N = 200000;
int n;
vector<int> e[N + 5];
int g[N + 5];
int f[N + 5];  // f[i] : 从链的末尾⾛到i点所经过的点的数量;
int ans;
void init()
{
    for (int i = 1; i <= n; i++) e[i].clear(), g[i] = 0, f[i] = 0;
    return;
}
void topsort()
{
    queue<int> q;
    for (int i = 1; i <= n; i++)
    {
        if (!g[i])
        {
            q.push(i);
        }
    }
    while (!q.empty())
    {
        int u = q.front();
        q.pop();
        ans = max(ans, f[u]);
        for (auto v : e[u])
        {
            f[v] = max(f[v], f[u] + 1);
            g[v] -= 1;
            if (!g[v])
            {
                q.push(v);
            }
        }
    }
    return;
}
void solve()
{
    cin >> n;
    init();
    for (int i = 1; i <= n; i++)
    {
        int a;
        cin >> a;
        e[i].push_back(a);
        g[a] += 1;
    }
    ans = -1;
    topsort();
    cout << ans + 3 << endl;
    return;
}
int main()
{
    int t;
    cin >> t;
    while (t--) solve();
    return 0;
}

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息