其他分享
首页 > 其他分享> > LibreOJ 2421 信息传递

LibreOJ 2421 信息传递

作者:互联网

题目链接:LibreOJ 2421 信息传递

题目大意:

题解:
建立传递者和接收者的单向边,加边的同时判断是否成环,记录环的大小并更新最小值。

#include <iostream>
using namespace std;

int n, fa[200010], ans = 0x3f3f3f3f, cnt, x;

int get(int x) {
    cnt++;
    return fa[x] == x ? x : get(fa[x]);
}

int main() {
    ios::sync_with_stdio(false);
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        fa[i] = i;
    }
    for (int i = 1; i <= n; ++i) {
        cnt = 0;
        cin >> x;
        if (get(x) == i) {
            ans = min(ans, cnt);
        } else {
            fa[i] = x;
        }
    }
    cout << ans;
    return 0;
}

标签:cnt,LibreOJ,get,int,2421,传递,fa,ans
来源: https://www.cnblogs.com/IzumiSagiri/p/15860428.html