码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1051: [HAOI2006]受欢迎的牛

时间:2016-10-02 21:47:03      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

Description

一个有向图,求所以能被别的点到达的点的个数.

Sol

Tarjan + 强连通分量 + 缩点.

缩点以后找强连通分量,缩点,然后当图有且仅有1个出度为1的点时,有答案.

Code

/**************************************************************
    Problem: 1051
    User: BeiYu
    Language: C++
    Result: Accepted
    Time:76 ms
    Memory:3048 kb
****************************************************************/
 
#include<cstdio>
#include<stack>
#include<vector>
#include<iostream>
using namespace std;
 
const int N = 10005;
#define debug(a) cout<<#a<<"="<<a<<" "
#define ct cout<<endl
#define _ct cout<<"----------"<<endl
 
int n,m,cnt,bcnt;
int dfsn[N],low[N],ins[N],b[N],sz[N];
vector<int> g[N];
vector<int> h[N];
stack<int> stk;
struct Edge{ int fr,to; }edge[N*5];
 
inline int in(int x=0,char ch=getchar()){ while(ch>‘9‘||ch<‘0‘) ch=getchar();
    while(ch>=‘0‘&&ch<=‘9‘) x=(x<<3)+(x<<1)+ch-‘0‘,ch=getchar();return x; }
void Tarjan(int u,int fa){
    dfsn[u]=low[u]=++cnt,ins[u]=1,stk.push(u);
    for(int i=0,lim=g[u].size(),v;i<lim;i++) if((v=g[u][i])!=fa){
        if(!dfsn[v]){ Tarjan(v,u),low[u]=min(low[u],low[v]); }
        else if(ins[v]) low[u]=min(low[u],dfsn[v]);
    }if(dfsn[u]==low[u]){
        ++bcnt;int v;
        for(;;){ v=stk.top(),stk.pop(),ins[v]=0,b[v]=bcnt,sz[bcnt]++;if(u==v) break; }
    }
}
int main(){
//  freopen("in.in","r",stdin);
    n=in(),m=in();
    for(int i=1,u,v;i<=m;i++) u=in(),v=in(),g[u].push_back(v),edge[i]=(Edge){ u,v };
    for(int i=1;i<=n;i++) if(!dfsn[i]) Tarjan(i,0);
//  _ct;debug(bcnt),ct;
    for(int i=1,u,v;i<=m;i++){
        u=edge[i].fr,v=edge[i].to;
//      debug(u),debug(v),ct;
//      debug(b[u]),debug(b[v]),ct;
        if(b[u]!=b[v]) h[b[u]].push_back(b[v]);
    }
//  _ct;
    int tmp=0,ans=0;
    for(int i=1;i<=bcnt;i++){
        if(h[i].size()==0) ans=sz[i],tmp++;
    }
    if(tmp!=1) putchar(‘0‘);else printf("%d",ans);
    return 0;
}

  

BZOJ 1051: [HAOI2006]受欢迎的牛

标签:

原文地址:http://www.cnblogs.com/beiyuoi/p/5928017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!