【luogu2341】 [HAOI2006]受欢迎的牛 [tarjan 缩点]
时间:2019-06-12
本文章向大家介绍【luogu2341】 [HAOI2006]受欢迎的牛 [tarjan 缩点],主要包括【luogu2341】 [HAOI2006]受欢迎的牛 [tarjan 缩点]使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
背一下刚刚出炉的模板 (快乐打水题)
emmmm 反向建边方便后面计算强连通分量的出度(反向建边就把出度变为入度)
缩完点后枚举边 然后就来统计现在的入度
最后就看有没有多于两个0入度的点 如果有 就没有牛可以成为明星
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<cmath> #include<vector> #include<stack> #include<algorithm> using namespace std; const int N=10000+5,M=50000+5; int n,m,dfn[N],low[N],inst[N],bl[N],idx=0,Bcnt=0; int sum[N],r[N]; stack<int>s; vector<int>g[N]; template <class t>void rd(t &x){ x=0;int w=0;char ch=0; while(!isdigit(ch)) w|=ch=='-',ch=getchar(); while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=w?-x:x; } int head[N],tot=0; struct edge{int u,v,nxt;}e[M]; void add(int u,int v){ e[++tot]=(edge){u,v,head[u]};head[u]=tot; } void tarjan(int u){ dfn[u]=low[u]=++idx; inst[u]=1,s.push(u); for(int i=head[u],v;i;i=e[i].nxt){ v=e[i].v; if(!dfn[v]) tarjan(v),low[u]=min(low[u],low[v]); else if(inst[v]&&dfn[v]<low[u]) low[u]=dfn[v]; } if(dfn[u]==low[u]){ ++Bcnt; int v; do{ v=s.top();s.pop(); bl[v]=Bcnt; ++sum[Bcnt]; inst[v]=0; }while(u!=v); } } int main(){ freopen("in.txt","r",stdin); rd(n),rd(m); for(int i=1,u,v;i<=m;++i){ rd(u),rd(v); add(v,u); } memset(dfn,0,sizeof(dfn)); for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i); for(int i=1;i<=tot;++i) if(bl[e[i].u]!=bl[e[i].v]) ++r[bl[e[i].v]]; int ans,cnt=0; for(int i=Bcnt;i;--i) if(!r[i]) ans=sum[i],++cnt; if(cnt==1) printf("%d",ans); else printf("0"); return 0; }
原文地址:https://www.cnblogs.com/lxyyyy/p/11008691.html
- 从WordPress SQLi谈PHP格式化字符串问题
- 自己实现PC端jQuery版轮播图
- Tips for thrift
- Java8新特性——StreamAPI(一)
- springcloud学习手册-Hystrix(仪表盘说明)
- RedRabbit——基于BrokerPattern服务器框架
- C++任务队列与多线程
- 游戏服务器ID生成器组件
- Java8新特性——Lambda表达式(一)
- C++ FFLIB之FFRPC:多线程&多进程的scalability探索
- ffrpc-c++进程间(服务器端、客户端)通信框架
- Docker入门实战(一)——Docker常用命令
- C++使用ffpython嵌入和扩展python
- 前端防御从入门到弃坑——CSP变迁
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法