UOJ #146. 【NOIP2015】信息传递 连通分量 tarjan模板题

http://uoj.ac/problem/146

题解:强连通分量 tarjan模板题。同时试了一下codeblock

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
vector<int> E[maxn];
int dfn[maxn],low[maxn],tot,n,ans=maxn,vis[maxn];
stack<int> S;
void tarjan(int x){
    low[x]=dfn[x]=++tot;
    S.push(x);vis[x]=1;
    for(int i=0;i<E[x].size();i++){
        int v=E[x][i];
        if(!dfn[v]){
            tarjan(v);
            low[x]=min(low[x],low[v]);

        }else if(vis[x]){
        low[x]=min(low[x],dfn[v]);
        }
    }
    if(low[x]==dfn[x]){
        int cnt=0;
        while(1){
            int now=S.top();
            S.pop();
            vis[x]=0;
            cnt++;
            if(now==x)break;
        }
        if(cnt>1)ans=min(ans,cnt);
    }
}
int main(){
  cin>>n;
  for(int i=1;i<=n;i++){
    int x;
    scanf("%d",&x);
    E[i].push_back(x);
  }
  for(int i=1;i<=n;i++){
    if(!dfn[i])tarjan(i);

  }
  cout<<ans<<endl;
}

原文地址:https://www.cnblogs.com/SuuT/p/8673313.html

时间: 2024-10-24 13:59:10

UOJ #146. 【NOIP2015】信息传递 连通分量 tarjan模板题的相关文章

洛谷P2661 信息传递 类似tarjan 强连通 灌水

洛谷P2661 信息传递类似tarjan 强连通 灌水 题意 求一个特殊的图的最小环 这个图 有一个性质 每个点只有一条出边 这样满足一个性质,一张图只有 一个环,以及别的连向他们的边都是一些连向 或者 间接连向这个环的树枝 这些树枝一定不会连成环,因为 每个点只有一条出边,而不可能有两条,所以只要把这些树枝边都删掉,然后再类似tarjan一样跑一遍灌水就行了 先说一下思路,这整道题就是给你几个带枝叶的环要你求最短环而已,于是在输入的时候可以把图中每个点的入度记录下来,然后再删除那些入度为0的点

[NOIP2015]信息传递

[NOIP2015]信息传递[问题描述]有??个同学(编号为1到??)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为?? 的同学的信息传递对象是编号为????的同学.游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮?[输入格式]输入文件名为m

noip2015 信息传递 强连通块

时隔好久,重新把那些题找出来,写一写了,毕竟实力还很有限,得学. 一开始,最大的疑惑还是怕一个环里有另外一个环(毕竟经验不丰富),后来看到了这段话 T2 信息传递 大意:在一个只有n条有向边的图中,每个结点出度为1,求一个包含节点数最少的环. 分析:因为只有n条边并且每个点都有且仅有一条边连出去,所以只可能存在简单环,不会出现那种8字形的环套环. 证明:每个点有两种情况:1.不在任何一个环中 这样的点可以直接忽略掉,看成是有n-1个点,n-1条边来证明就行了.2.在某个环中.那么如果我们现在有了

2105. [NOIP2015] 信息传递

★☆   输入文件:2015message.in   输出文件:2015message.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自

图论例题1——NOIP2015信息传递

题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮? 输入输出格式 输入格式: 输入共2行. 第1行包含1个正整数n表示

cogs luogu 2105. [NOIP2015] 信息传递

★☆   输入文件:2015message.in   输出文件:2015message.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自

洛谷P2661 信息传递==coedevs4511 信息传递 NOIP2015 day1 T2

P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮? 输入输出格式 输入格式: 输入共2行. 第1

【NOIP2015】信息传递

Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为的同学的信息传递对象是编号为的同学.游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮? Input 输入共 2行. 第 1行包含1个正整数n,表示

2015 NOIP day2 t2 信息传递 tarjan

信息传递 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.luogu.org/problem/show?pid=2661 Description 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里 获