zoukankan      html  css  js  c++  java
  • 信息传递(NOIP2015)(寻找最小环。。)

    原题传送门

    这是一道寻找最小环的题目。

    在做的时候给每一个点染色。。

    防止再做已经搜过的点(优化)

    v[]表示是否访问的过,以及第一次访问该点的时间。

    u[]表示染色。。

    这道题还可以用拓补排序做。

    当然,我不会写,。原理掌握的也不是很清楚。。所以,坐等以后填坑。。

    下面贴代码

    #include<iostream> 
    #include<cstdio> 
    #include<cstring> 
    #define inf 0x3f3f3f3f 
    using namespace std;  
    int n,ans=inf,now; 
    int a[200001]; 
    int v[200001]; 
    int u[200001];  
    void dfs(int x,int q){ 
        if(v[x]!=0) 
        { 
        if(u[x]==now) 
        ans=min(ans,q-v[x]);     
        return ; 
        } 
        v[x]=q; 
        u[x]=now; 
        dfs(a[x],q+1); 
    } 
    int main(){ 
        scanf("%d",&n); 
        for(int i=1;i<=n;i++) 
        scanf("%d",&a[i]); 
        for(int i=1;i<=n;i++) 
        { 
            now=i; 
            if(!v[i]) 
            { 
                v[i]=1; 
                u[i]=now; 
                dfs(a[i],2); 
            } 
        } 
        printf("%d
    ",ans); 
        return 0; 
    } 
  • 相关阅读:
    浏览器组成
    Go!!!
    产假计算器地址
    flex 纵向布局,垂直换行,没有撑开父盒子宽度,求解??
    毕业档案
    进程与线程
    事件循环
    回调地狱
    错误优先回调
    组件 v-if 小心哦
  • 原文地址:https://www.cnblogs.com/ghostfly233/p/6872526.html
Copyright © 2011-2022 走看看