1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)
题目大意: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+10; 14 15 struct edge{int to,nxt;}e[N*2]; 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=0;ch=getchar(); 25 while(!isdigit(ch)){f=(ch=='-');ch=getchar();} 26 while(isdigit(ch)){x=x*10+ch-'0';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]=1; 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]=0; 47 }while(p!=k); 48 } 49 } 50 51 int main(){ 52 int u,v; 53 re(n);re(m); 54 foru(i,1,m){ 55 re(u);re(v); 56 add(u,v); 57 } 58 foru(i,1,n)if(!dfn[i])tarjan(i); 59 if(cl==1){printf("%d\n",n);return 0;} 60 foru(k,1,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=0; 64 foru(i,1,cl)if(!out[i]){v++;u=i;} 65 if(v==1){ 66 foru(i,1,n)if(bl[i]==u)ans++; 67 printf("%d\n",ans);return 0; 68 } 69 else puts("0"); 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 0; 76 }
转载于:https://www.cnblogs.com/y-m-y/p/7681749.html
1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)相关推荐
- BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 7120 Solved: 3779 [Submit][S ...
- BZOJ 1051: [HAOI2006]受欢迎的牛【Trajan】
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MB Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛 强连通分量,Tarjan缩点
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- bzoj1051 [HAOI2006]受欢迎的牛 tarjan缩点
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜 ...
- Network of Schools POJ - 1236 tarjan强连通分量缩点
A number of schools are connected to a computer network. Agreements have been developed among those ...
- 【POJ - 2553】The Bottom of a Graph(tarjan强连通分量缩点,模板题)
题干: We will use the following (standard) definitions from graph theory. Let V be a nonempty and fini ...
- bzoj1051: [HAOI2006]受欢迎的牛
tarjan缩点.判断是否只有一个没有出边.是则输出该点点数 #include<cstdio> #include<cstring> #include<iostream&g ...
- 2021.8.9【提高B组模拟1】T2 QYQ在艾泽拉斯(Tarjan强连通分量)(并查集)
QYQ在艾泽拉斯 题目大意 输入样例 3 2 1 2 3 1 1 2 1 0 输出样例 4 样例说明: QYQ从3号点开始,走到2号点,最后走到1号点,结束旅程,共获得1+2+1=4价值的宝物 题目数 ...
- 洛谷P2341 [HAOI2006]受欢迎的牛 (Tarjan,SCC缩点)
P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就 ...
最新文章
- 忽略某些文件 —— Git 学习笔记 05
- Openshift源中的高可用性Drools无状态服务
- JAVA内存的可见性
- linux分辨率 保存,linux分辨率设置方法与问题-linux分辨率的设置方法分享-linux修改分辨率的经验分享_169IT.COM...
- Ubuntu 16 安装JDK1.8
- Java Foundation serial ( 一 )
- 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...
- linux从哪里入侵电脑,linux入侵的基本命令网站安全 -电脑资料
- datagrid getselected/getselections/getData之间的用法差异
- ps计算机设置,做着ps电脑卡了怎么办 试试设置这四项
- 360n6pro刷鸿蒙系统,因太费电想刷系统,N6Pro哪个版本的系统耗电少,有什么问题或缺点...
- PhpStorm Unhandled exceptions错误解决
- 使用Larave5.6l提交POST请求出现The page has expired due to inactivity错误
- 数据结构 期末复习主观题练习题(答案版)
- Android Smart Linkify 支持机器学习
- c++ 45行代码实现 生命游戏-细胞自动机!!!
- 基于Flexsim的供应链建模与仿真课程设计
- Win11开机启动项怎么调整,Win11开机启动项怎么设置
- @SpringbootApplication注释是什么意思?
- 史上最强的绕口令.没人能读出.要不你试试?