1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)
题目大意:CodeVs2822的简单版本
$Tarjan$强连通分量+缩点,若连通块的个数等于一则输出n;若缩点后图中出度为0的点个数为1,输出对应连通块内的点数;否则输出0;
代码中注释部分是调了半个小时没发现有错的地方。。。
- #include<cstring>
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- #include<cctype>
- #define foru(i,x,y) for(int i=x;i<=y;i++)
- #define ford(i,x,y) for(int i=x;i>=y;i--)
- #define re(x) x=read()
- using namespace std;
- typedef long long LL;
- typedef double db;
- const int inf=1e9;
- const int N=1e6+;
- struct edge{int to,nxt;}e[N*];
- int dfn[N],low[N],stk[N],head[N],vis[N],bl[N],out[N],x,cnt,cl,ed,ne,n,m,ans;
- void add(int a,int b){
- e[++ne]=(edge){b,head[a]};head[a]=ne;
- }
- int read(){
- static int f,x;static char ch;
- x=f=;ch=getchar();
- while(!isdigit(ch)){f=(ch=='-');ch=getchar();}
- while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
- return f?-x:x;
- }
- void tarjan(int k){
- dfn[k]=low[k]=++cnt;stk[++ed]=k;vis[k]=;
- for(int i=head[k];i;i=e[i].nxt){
- int v=e[i].to;
- if(!dfn[v]){
- tarjan(v);
- low[k]=min(low[k],low[v]);
- }
- else if(vis[v])low[k]=min(low[k],dfn[v]);
- }
- int p;
- if(low[k]==dfn[k]){
- cl++;//x++;
- do{
- p=stk[ed--];
- bl[p]=cl;
- vis[p]=;
- }while(p!=k);
- }
- }
- int main(){
- int u,v;
- re(n);re(m);
- foru(i,,m){
- re(u);re(v);
- add(u,v);
- }
- foru(i,,n)if(!dfn[i])tarjan(i);
- if(cl==){printf("%d\n",n);return ;}
- foru(k,,n)
- for(int i=head[k];i;i=e[i].nxt)
- if(bl[k]!=bl[e[i].to])out[bl[k]]++;
- v=;
- foru(i,,cl)if(!out[i]){v++;u=i;}
- if(v==){
- foru(i,,n)if(bl[i]==u)ans++;
- printf("%d\n",ans);return ;
- }
- else puts("");
- // if(v==1)
- // foru(i,1,n)if(bl[i]==u)ans++;
- // else ans=0;
- // printf("%d\n",ans);
- return ;
- }
1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)的更多相关文章
- 1051. [HAOI2006]受欢迎的牛【强连通分量】
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
- 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...
- BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...
- BZOJ 1051:[HAOI2006]受欢迎的牛(强连通分量)
受欢迎的牛Description每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么 ...
- bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ...
- 【题解】洛谷P2341 [HAOI2006]受欢迎的牛(强连通分量)
洛谷P2341:https://www.luogu.org/problemnew/show/P2341 前言 这题看错题目 足足花了将近5小时提交了15次 在一位dalao的提醒下才AC了 记得要看清 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8172 Solved: 4470[Submit][Sta ...
随机推荐
- 2020/1/31 PHP代码审计之文件包含漏洞
0x00 文件包含简介 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校检,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...
- Java SE 5.0(JDK 1.5)新特性
目录 自动装箱与拆箱 枚举(常用来设计单例模式) 静态导入static import 可变参数(Varargs) 内省(Introspector) 泛型(Generics) For-Each循环 ja ...
- grep sed akw
sed参考 #打印2-4行 [root@localhost ~]# sed -n '2,4p' test [root@localhost ~]# awk 'NR==2,NR==4{print}' te ...
- 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 & ...
- iOS部分页面横屏显示
在iOS系统支持横屏顺序默认读取plist里面设置的方向(优先级最高)等同于Xcode Geneal设置里面勾选application window设置的级别次之 然后是UINavigationcon ...
- protobuf 的enum与string转换
c/c++ enum 介绍 说起c/c++ 的enum,比起python 真的是方便简洁 enum type{ type1 = 0, type2 } enum的元素对应的int 默认从0 开始依次增加 ...
- css块级元素
<CSS权威指南>中文字显示:任何不是块级元素的可见元素都是内联元素.其表现的特性是“行布局”形式,这里的“行布局”的意思就是说其表现形式始终以行进行显示.比如,我们设定一个内联元素bor ...
- tar.xz文件
创建或解压tar.xz文件的方法 习惯了 tar czvf 或 tar xzvf 的人可能碰到 tar.xz也会想用单一命令搞定解压或压缩.其实不行 tar里面没有征对xz格式的参数比如 z是针对 g ...
- Python笔记_第四篇_高阶编程_高阶函数_3.sorted
1. sorted函数: 常用的排序分:冒泡排序.选择排序.快速排序.插入排序.计数器排序 实例1:普通排序 # 普通排序 list1 = [,,,,] list2 = sorted(list1) # ...
- PAT Basic 1034 有理数四则运算(20) [数学问题-分数的四则运算]
题目 本题要求编写程序,计算2个有理数的和.差.积.商. 输⼊格式: 输⼊在⼀⾏中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...