关闭

2015 NOIP day2 t2 信息传递 (tarjan 连通图)

680人阅读 评论(0) 收藏 举报
分类:

题目链接
题意:略:
解答:缩点后,计算连通分量里 的点数
,但是最后一个case无法通过。貌似是爆栈了,只得到了90分


#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<int,int> P;
const int maxn=300005;
const LL inf=1<<27;
const LL mod=1e9+7;
vector<int> G[maxn];

int dfn[maxn],low[maxn],s[maxn];
int belong[maxn];
bool ins[maxn];
int cnt,num,top;

int my[maxn];
void dfs(int u){
    dfn[u]=low[u]=++num;
    s[++top]=u;
    ins[u]=true;
    int N=G[u].size();
    for(int i=0;i<N;i++){
        int v=G[u][i];
        if(!dfn[v]){
            dfs(v);
            low[u]=min(low[u],low[v]);
        }
        else if(ins[v]&&dfn[v]<low[u]){
            low[u]=dfn[v];
        }
    }
    if(low[u]==dfn[u]){
        cnt++;
        int v;
        do{
            v=s[top--];
            ins[v]=false;
            belong[v]=cnt;
            my[cnt]++;
        }while(v!=u);
    }
}

void Tarjan(int n){
    cnt=num=top=0;
    cl(dfn,0);
    cl(ins,false);
    cl(my,0);
    cl(belong,0);
    for(int i=1;i<=n;i++)if(!dfn[i]){
        dfs(i);
    }
}

int main(){
    int n;scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int x;scanf("%d",&x);G[i].pb(x);
    }

    Tarjan(n);
    int ans=inf;
    for(int i=1;i<=cnt;i++)if(my[i]>1){
        ans=min(ans,my[i]);
    }
    printf("%d\n",ans);
    return 0;
}
0
0
查看评论

NOIP2015 信息传递 解题报告(强连通分量)

在线评测: http://codevs.cn/problem/4511/ 整体思路: 说白了就把这看成一张图,找一个大小不为1的最小的强连通分量即可 失误之处: 没啥失误,但是回忆tarjan还是有些慢,所以再来理顺一边,首先tarjan需要dfs对吧。然后得把dfn,...
  • qq_35772697
  • qq_35772697
  • 2016-08-27 14:14
  • 937

NOIP2015提高组Day2 子串

题目 分析我在考场上就想到了dp,但是。。 算了,没有但是,这就是结果,是自己努力不够的后果。 好,回到正题。方法0:(考场的sb方法…..) 设f[i,j,k]为a刚好匹配到i,b刚好匹配到j,分k组的方案数f[i,j,k]为a刚好匹配到i,b刚好匹配到j,分k组的方案数 转移十分暴力:...
  • xieguofu2014
  • xieguofu2014
  • 2015-12-06 10:26
  • 3200

NOIP2015普及组-扫雷游戏

题目太简单,不解释: #include int main(void) { char a[101][101]; int sum[100][100]={0}; int j,i,n,m; scanf("%d%d",&n,&m)...
  • qq_16964363
  • qq_16964363
  • 2016-08-20 10:59
  • 1681

【NOIP 2015 Day1 T2】信息传递(dfs || 拓扑排序 || Tarjan)

题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为的同学的信息传递对象是编号为的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能...
  • Loi_YZS
  • Loi_YZS
  • 2016-10-12 10:44
  • 964

Noip提高组2015 Day1 T2 信息传递 tarjan

题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。 游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里...
  • ThinFatty
  • ThinFatty
  • 2017-09-21 19:59
  • 80

【NOIP2015】洛谷P2661 信息传递(tarjan)

题目描述有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息...
  • Loi_Meiko
  • Loi_Meiko
  • 2016-11-07 16:38
  • 379

NOIP 2015 D1 T2 信息传递

趁着我还活在网上 多写点题解 * NOIP 2015 D1 T2 信息传递*2996: [NOIP2015]信息传递 D1 T2 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 21 Solved: 7 [Submit][Status][Web B...
  • qq_32451161
  • qq_32451161
  • 2016-01-28 23:04
  • 1578

[NOIP 2015]Day.1 T2 信息传递 【最小环】

一句话题意:求最小环70分·dfs#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> using na...
  • qq_33583069
  • qq_33583069
  • 2016-07-18 08:27
  • 241

【NOIP 2015】 D1 T2 信息传递

环 dfs
  • shm20000412
  • shm20000412
  • 2016-10-08 11:29
  • 518

NOIP2015提高组day2 —— 跳石头(stone)

#include <fstream> using namespace std; ifstream fin("stone.in"); ofstream fout("stone.out"); int N, a[100000]; int Binary_S...
  • gotojava9
  • gotojava9
  • 2015-12-05 00:40
  • 887
    个人资料
    • 访问:206574次
    • 积分:7060
    • 等级:
    • 排名:第3873名
    • 原创:522篇
    • 转载:3篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论