• 拓扑_dfs——找最小环


    今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹)。

    这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话应该也是可以水过部分分的,尧神说这道题咋打都能过,但我不会啊,于是开始了模拟,开了两个动态的数组进行模拟这个过程,一个传个另一个(很傻的做法)但我还是打了,代码量100+,于是轻轻松松过了样例点了提交不知道能过多少,嗯,20分,还行,后面dalao说这道题简单的很,交给我并茶几判环,不会啊,代码量就顶多50+,过了,然后一直看他的代码,记忆性的打出了他的代码理解不了最后在洛谷上找了篇题解,才发现自己没真正理解题目,画了个图知道了真正的找最小环,topsort完以后剩下的就剩环了dfs寻找最小的就行了,也还算简单,深刻理解环。

    代码:

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<ctime>
    #include<cstdio>
    #include<iomanip>
    #include<algorithm>
    #include<vector>
    #include<stack>
    #include<queue>
    #include<map>
    using namespace std;
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int maxn=200003;
    int a[maxn],d[maxn],b[maxn],ans=1e8;
    int n;
    void delet(int x)
    {
        d[x]=-1;
        b[a[x]]--;
        if(b[a[x]]==0&&d[a[x]]!=-1)
            delet(a[x]);
    }
    void dfs(int r,int l,int num)
    {
        if(l==r&&num!=0)
        {
            ans=min(ans,num);
            return;
        }
        if(d[a[r]]==0)
        {
            d[a[r]]=1;
            dfs(a[r],l,num+1);
            
        }
    }
    int main()
    {
        //freopen("1.in","r",stdin);
        n=read();
        memset(d,0,sizeof(d));
        memset(b,0,sizeof(b));
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
            a[i]=read(),b[a[i]]++;
        for(int i=1;i<=n;i++)
        {
            if(b[i]==0&&d[i]!=-1)
            {
                delet(i);
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(d[i]==0)
            dfs(i,i,0);
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code

    闻道玉门犹被遮,应将性命逐轻车。

  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/chdy/p/9689884.html
Copyright © 2020-2023  润新知