这样写时间复杂度是不是ON^2的啊
查看原帖
这样写时间复杂度是不是ON^2的啊
261262
WaltVBAlston楼主2021/10/18 21:21

RT,一篇题解,看着像是n^2算法,但是没有被卡,这是因为数据随机还是我对算法理解有误?

https://www.luogu.com.cn/blog/duoluoluo/solution-p2661
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 200010;
int n, fa[N], ans = 0x3f3f3f3f;
int get (int x, int &cnt) { //cnt记录环的长度 
    cnt ++;
    if (fa[x] == x) return x;
    else return get(fa[x], cnt);
}
int main () {
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++)
        fa[i] = i;
    for (int i = 1; i <= n; i ++) {
        int cnt = 0, f;
        scanf("%d", &f);
        if (get(f, cnt) == i) {
            ans = min(ans, cnt); //维护最小的环 
        }else
        	fa[i] = f;
    }
    printf("%d", ans);
    return 0;
}
2021/10/18 21:21
加载中...