Description

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

Sol

Tarjan + 强连通分量 + 缩点.

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

Code

  1. /**************************************************************
  2. Problem: 1051
  3. User: BeiYu
  4. Language: C++
  5. Result: Accepted
  6. Time:80 ms
  7. Memory:3044 kb
  8. ****************************************************************/
  9.  
  10. #include<cstdio>
  11. #include<stack>
  12. #include<vector>
  13. #include<iostream>
  14. using namespace std;
  15.  
  16. const int N = 10005;
  17. #define debug(a) cout<<#a<<"="<<a<<" "
  18. #define ct cout<<endl
  19. #define _ct cout<<"----------"<<endl
  20.  
  21. int n,m,cnt,bcnt;
  22. int dfsn[N],low[N],ins[N],b[N],sz[N];
  23. vector<int> g[N];
  24. vector<int> h[N];
  25. stack<int> stk;
  26. struct Edge{ int fr,to; }edge[N*5];
  27.  
  28. inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
  29. while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
  30. void Tarjan(int u){
  31. dfsn[u]=low[u]=++cnt,ins[u]=1,stk.push(u);
  32. for(int i=0,lim=g[u].size(),v;i<lim;i++){
  33. v=g[u][i];
  34. if(!dfsn[v]){ Tarjan(v),low[u]=min(low[u],low[v]); }
  35. else if(ins[v]) low[u]=min(low[u],dfsn[v]);
  36. }if(dfsn[u]==low[u]){
  37. ++bcnt;int v;
  38. for(;;){ v=stk.top(),stk.pop(),ins[v]=0,b[v]=bcnt,sz[bcnt]++;if(u==v) break; }
  39. }
  40. }
  41. int main(){
  42. // freopen("in.in","r",stdin);
  43. n=in(),m=in();
  44. for(int i=1,u,v;i<=m;i++) u=in(),v=in(),g[u].push_back(v),edge[i]=(Edge){ u,v };
  45. for(int i=1;i<=n;i++) if(!dfsn[i]) Tarjan(i);
  46. // _ct;debug(bcnt),ct;
  47. for(int i=1,u,v;i<=m;i++){
  48. u=edge[i].fr,v=edge[i].to;
  49. // debug(u),debug(v),ct;
  50. // debug(b[u]),debug(b[v]),ct;
  51. if(b[u]!=b[v]) h[b[u]].push_back(b[v]);
  52. }
  53. // _ct;
  54. int tmp=0,ans=0;
  55. for(int i=1;i<=bcnt;i++){
  56. if(h[i].size()==0) ans=sz[i],tmp++;
  57. }
  58. if(tmp!=1) putchar('0');else printf("%d",ans);
  59. return 0;
  60. }

  

  

BZOJ 1051: [HAOI2006]受欢迎的牛的更多相关文章

  1. BZOJ 1051: [HAOI2006]受欢迎的牛 缩点

    1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  2. bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2092  Solved: 1096[Submit][Sta ...

  3. BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )

    tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...

  4. BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8172  Solved: 4470[Submit][Sta ...

  5. 洛谷 P2341 BZOJ 1051 [HAOI2006]受欢迎的牛

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  6. BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1051 题解: 强连通缩点得到DAG图,将图转置一下,对入度为零的点跑dfs看看能不能访问 ...

  7. bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ...

  8. bzoj 1051 [HAOI2006]受欢迎的牛(tarjan缩点)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1051 题解:缩点之后判断出度为0的有几个,只有一个那么输出那个强连通块的点数,否者 ...

  9. 【BZOJ 1051】 1051: [HAOI2006]受欢迎的牛 (SCC)

    1051: [HAOI2006]受欢迎的牛 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如 ...

随机推荐

  1. (转)深入理解Java中的final关键字

    转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...

  2. Hash Table in C

    http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml http://en.literateprograms.org/Spec ...

  3. python中,ascii,unicode,utf8,gbk之间的关系梳理

    在计算机中,经常遇到编码问题,本节主要梳理下ascii,unicode,utf8,gbk 这几种编码之间的关系. ASCII 计算机中,所有数据都以0和1来表示.在一开始的时候,要表示的内容比较少,人 ...

  4. oracle安装常见问题

    版本信息:CentOS6.5 + oracle11G 1.监视器颜色错误: [oracle@bogon database]$ 正在启动 Oracle Universal Installer... 检查 ...

  5. sqlmap注入技巧收集

    收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅,欢迎接楼补充.分享. TIP1 当我们注射的时候,判断注入 http://site/script?id= ...

  6. OC-方法的声明和实现、匿名对象

    方法声明: 方法调用: *冒号也是方法名的一部分 *同一个类中不允许两个对象方法同名 练习 给Car类设计一个方法,用来和其他车比较车速,如果快返回1,慢返回-1,相同返回0 #import < ...

  7. Working with Transactions (EF6 Onwards)

    Data Developer Center > Learn > Entity Framework > Get Started > Working with Transactio ...

  8. 正确运用synchronized和二次判断 实现多线程安全

    正确运用synchronized和二次判断 实现多线程安全,做出高效二符合预期的程序,特别是多个线程跑一个对象的时候,如下图所示:  测试代码如下: 特别注意if(shutdownRequested) ...

  9. CSS样式表继承详解

    最近在恶补css样式表的基础知识.上次研究了css样式表之冲突问题详解 .这次是对 css 继承 特性的学习. 什么是css 继承?要想了解css样式表的继承,我们先从文档树(HTML DOM)开始. ...

  10. Win8/Win10无法打开这个应用 内置管理员账户

    现在装win10系统的同伴越来越多了,相比于win7,win10在某些设置方面也有些变化,比如我们在使用win8或者win10时,会碰到如图所示的对话框: Windows10/Windows8无法使用 ...