[Noip提高组]-Day1-T2 信息传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Noip提高组]-Day1-T2 信息传递相关的知识,希望对你有一定的参考价值。

算法:Tarjan

大意:给你一个n边的有n个节点的图,求图中最小环

思路:直接强连通上,这道题可以涨姿势

   脑子有坑!!!差点忘了出栈,第一次打强连通,感觉自己药丸

代码:

技术分享
 1 #include<bits/stdc++.h>
 2 #define maxn 200007
 3 using namespace std;
 4 int dfn[maxn],low[maxn];
 5 bool vis[maxn]; 
 6 vector<int> E[maxn];
 7 int n,x,ans,tot; 
 8 stack<int> S;
 9 void tarjan(int x){
10     dfn[x]=low[x]=++tot;
11     S.push(x);vis[x]=1;
12     for(int i=0;i<E[x].size();i++){
13         int v=E[x][i];
14             if(!dfn[v]){
15                 tarjan(v);low[x]=min(low[x],low[v]);
16             }else if(vis[v]){
17                 low[x]=min(low[x],dfn[v]);
18             }
19     }
20     if(low[x]==dfn[x]){
21         int cnt=0;
22         while(1){
23             int now=S.top();S.pop();
24             vis[now]=0;
25             cnt++;
26             if(now==x) break;
27         }
28         if(cnt>1) ans=min(ans,cnt);
29     }
30 }
31 int main(){
32     ans=1e+9;
33     scanf("%d",&n);
34     for(int i=1;i<=n;i++){
35         scanf("%d",&x);
36         E[i].push_back(x);
37     }
38     for(int i=1;i<=n;i++){
39         if(!dfn[i]) tarjan(i);
40     }
41     printf("%d",ans);
42 } 
View Code

 


以上是关于[Noip提高组]-Day1-T2 信息传递的主要内容,如果未能解决你的问题,请参考以下文章

[NOIP2015] 提高组 洛谷P2661 信息传递

[noip2014day1-T2]联合权值

NOIP2016提高A组8.12总结

[noip2014day1-T3]飞扬的小鸟

如何评价NOIP2015提高组复赛试题

JZYZOJ1445 [noip2014day1-T3]飞扬的小鸟 动态规划 完全背包