zoukankan      html  css  js  c++  java
  • 拓扑_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

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

  • 相关阅读:
    httpRuntime 元素(ASP.NET 设置架构)
    Mac OS X Lion下配置Tomcat7
    MyEclipse集成SVN插件subclipse
    Mac OS X 窗口操作快捷键
    Ubuntu的个人使用总结
    ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)
    XAMPP和Mysql共存的方法
    wine qq2010面板上的邮箱和空间问题
    VS2010以及vs10sp1安装问题
    css之盒模型
  • 原文地址:https://www.cnblogs.com/chdy/p/9689884.html
Copyright © 2011-2022 走看看