题目大意:CodeVs2822的简单版本


传送门

$Tarjan$强连通分量+缩点,若连通块的个数等于一则输出n;若缩点后图中出度为0的点个数为1,输出对应连通块内的点数;否则输出0;

代码中注释部分是调了半个小时没发现有错的地方。。。

  1. #include<cstring>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<cctype>
  6. #define foru(i,x,y) for(int i=x;i<=y;i++)
  7. #define ford(i,x,y) for(int i=x;i>=y;i--)
  8. #define re(x) x=read()
  9. using namespace std;
  10. typedef long long LL;
  11. typedef double db;
  12. const int inf=1e9;
  13. const int N=1e6+;
  14.  
  15. struct edge{int to,nxt;}e[N*];
  16. int dfn[N],low[N],stk[N],head[N],vis[N],bl[N],out[N],x,cnt,cl,ed,ne,n,m,ans;
  17.  
  18. void add(int a,int b){
  19. e[++ne]=(edge){b,head[a]};head[a]=ne;
  20. }
  21.  
  22. int read(){
  23. static int f,x;static char ch;
  24. x=f=;ch=getchar();
  25. while(!isdigit(ch)){f=(ch=='-');ch=getchar();}
  26. while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
  27. return f?-x:x;
  28. }
  29.  
  30. void tarjan(int k){
  31. dfn[k]=low[k]=++cnt;stk[++ed]=k;vis[k]=;
  32. for(int i=head[k];i;i=e[i].nxt){
  33. int v=e[i].to;
  34. if(!dfn[v]){
  35. tarjan(v);
  36. low[k]=min(low[k],low[v]);
  37. }
  38. else if(vis[v])low[k]=min(low[k],dfn[v]);
  39. }
  40. int p;
  41. if(low[k]==dfn[k]){
  42. cl++;//x++;
  43. do{
  44. p=stk[ed--];
  45. bl[p]=cl;
  46. vis[p]=;
  47. }while(p!=k);
  48. }
  49. }
  50.  
  51. int main(){
  52. int u,v;
  53. re(n);re(m);
  54. foru(i,,m){
  55. re(u);re(v);
  56. add(u,v);
  57. }
  58. foru(i,,n)if(!dfn[i])tarjan(i);
  59. if(cl==){printf("%d\n",n);return ;}
  60. foru(k,,n)
  61. for(int i=head[k];i;i=e[i].nxt)
  62. if(bl[k]!=bl[e[i].to])out[bl[k]]++;
  63. v=;
  64. foru(i,,cl)if(!out[i]){v++;u=i;}
  65. if(v==){
  66. foru(i,,n)if(bl[i]==u)ans++;
  67. printf("%d\n",ans);return ;
  68. }
  69. else puts("");
  70.  
  71. // if(v==1)
  72. // foru(i,1,n)if(bl[i]==u)ans++;
  73. // else ans=0;
  74. // printf("%d\n",ans);
  75. return ;
  76. }

1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)的更多相关文章

  1. 1051. [HAOI2006]受欢迎的牛【强连通分量】

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

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

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

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

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

  4. 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点

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

  5. BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...

  6. BZOJ 1051:[HAOI2006]受欢迎的牛(强连通分量)

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

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

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

  8. 【题解】洛谷P2341 [HAOI2006]受欢迎的牛(强连通分量)

    洛谷P2341:https://www.luogu.org/problemnew/show/P2341 前言 这题看错题目 足足花了将近5小时提交了15次 在一位dalao的提醒下才AC了 记得要看清 ...

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

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

随机推荐

  1. 2020/1/31 PHP代码审计之文件包含漏洞

    0x00 文件包含简介 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校检,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...

  2. Java SE 5.0(JDK 1.5)新特性

    目录 自动装箱与拆箱 枚举(常用来设计单例模式) 静态导入static import 可变参数(Varargs) 内省(Introspector) 泛型(Generics) For-Each循环 ja ...

  3. grep sed akw

    sed参考 #打印2-4行 [root@localhost ~]# sed -n '2,4p' test [root@localhost ~]# awk 'NR==2,NR==4{print}' te ...

  4. Go get unrecognized import path "gopkg.in/yaml.v2"

    安装gin: go get -u github.com/gin-gonic/gin 出现错误: package gopkg.in/yaml.v2: unrecognized import path & ...

  5. iOS部分页面横屏显示

    在iOS系统支持横屏顺序默认读取plist里面设置的方向(优先级最高)等同于Xcode Geneal设置里面勾选application window设置的级别次之 然后是UINavigationcon ...

  6. protobuf 的enum与string转换

    c/c++ enum 介绍 说起c/c++ 的enum,比起python 真的是方便简洁 enum type{ type1 = 0, type2 } enum的元素对应的int 默认从0 开始依次增加 ...

  7. css块级元素

    <CSS权威指南>中文字显示:任何不是块级元素的可见元素都是内联元素.其表现的特性是“行布局”形式,这里的“行布局”的意思就是说其表现形式始终以行进行显示.比如,我们设定一个内联元素bor ...

  8. tar.xz文件

    创建或解压tar.xz文件的方法 习惯了 tar czvf 或 tar xzvf 的人可能碰到 tar.xz也会想用单一命令搞定解压或压缩.其实不行 tar里面没有征对xz格式的参数比如 z是针对 g ...

  9. Python笔记_第四篇_高阶编程_高阶函数_3.sorted

    1. sorted函数: 常用的排序分:冒泡排序.选择排序.快速排序.插入排序.计数器排序 实例1:普通排序 # 普通排序 list1 = [,,,,] list2 = sorted(list1) # ...

  10. PAT Basic 1034 有理数四则运算(20) [数学问题-分数的四则运算]

    题目 本题要求编写程序,计算2个有理数的和.差.积.商. 输⼊格式: 输⼊在⼀⾏中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...