bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051
思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且只能有一个出度为0的,如果有多个的话那么没有点会收到所有人欢迎,我们找到这个点,这个点可能是缩完点后的点,我们找下这个点代表的环中点的数量。
实现代码:
- #include<bits/stdc++.h>
- using namespace std;
- const int M = 5e4+;
- vector<int>g[M];
- stack<int>s;
- int dfn[M],low[M],vis[M],in[M],out[M],cnt,num,scc[M];
- void Tarjan(int u){
- dfn[u] = low[u] = ++cnt;vis[u] = ;
- s.push(u);
- for(int i = ;i < g[u].size();i ++){
- int v = g[u][i];
- if(!vis[v]) Tarjan(v),low[u] = min(low[u],low[v]);
- else low[u] = min(low[u],dfn[v]);
- }
- if(low[u] == dfn[u]){
- num++; int now;
- do{
- now = s.top(); s.pop();
- scc[now] = num;
- } while(!s.empty()&&now!=u);
- }
- }
- int main()
- {
- int n,m,u,v;
- scanf("%d%d",&n,&m);
- for(int i = ;i <= m;i ++){
- scanf("%d%d",&u,&v);
- g[u].push_back(v);
- }
- for(int i = ;i <= n;i ++){
- if(!vis[i]) Tarjan(i);
- }
- for(int i = ;i <= n;i ++){
- for(int j = ;j < g[i].size();j ++){
- int v = g[i][j];
- if(scc[i] != scc[v]){
- out[scc[i]]++;
- in[scc[v]]++;
- }
- }
- }
- int k = ,ans = ,tag;
- for(int i = ;i <= num;i ++){
- if(!out[i]){
- k++; tag = i;
- }
- }
- if(k == ){
- for(int i = ;i <= n;i ++)
- if(scc[i] == tag) ans++;
- printf("%d\n",ans);
- }
- else printf("0\n");
- return ;
- }
bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)的更多相关文章
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
- BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...
- BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1051 题解: 强连通缩点得到DAG图,将图转置一下,对入度为零的点跑dfs看看能不能访问 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8172 Solved: 4470[Submit][Sta ...
- BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...
- bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...
- [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序
---题面--- 题解: 首先tarjan缩点应该还是容易想到的,因为喜爱具有传递性,所以一个强联通分量里面的点实际上是全部等效的,所以我们可以缩成一个方便判断, 缩完点之后整张图就变成了一个有向无环 ...
随机推荐
- Windows下的两个缺陷
记事本缺陷: 标题:新建记事本中仅输入“联通”,保存关闭后再打开,显示为乱码 详细描述: 环境说明:操作系统ALL 重现步骤: 1.新建一个记事本,在其中仅输入“联通”两个字 2.再将该记事本关闭保存 ...
- 十二、存token获取token刷新token发送header头
//测试token //获取token function setToken(data){ var storage = window.localStorage; if(!storage){ alert( ...
- PS打造油画般的风景人像
- HashSet中存放不重复元素
一.自定义对象存放在hashSet中,保证元素不重复.重写hashCode()和equals()方法 public class Student{ private String name; privat ...
- Tomcat v7.0 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
十二月 , :: 下午 org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request ...
- [转帖]Linux:cut命令详解
Linux:cut命令详解 https://www.cnblogs.com/Spiro-K/p/6361646.html cut -f cut -f -d cut -c1- 这三个命令好像最常见, 记 ...
- 给普通用户添加root权限
>>提君博客原创 http://www.cnblogs.com/tijun/ << 第一步,以root用户查看/etc/sudoers [root@ltt2 hadoop] ...
- 转:Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)
1 继续关系: BoxDecoration:实现边框.圆角.阴影.形状.渐变.背景图像 ShapeDecoration:实现四个边分别指定颜色和宽度.底部线.矩形边色.圆形边色.体育场(竖向椭圆). ...
- CDH 6.0.1 集群搭建 「After install」
集群搭建完成之后其实还有很多配置工作要做,这里我列举一些我去做的一些. 首先是去把 zk 的角色重新分配一下,不知道是不是我在配置的时候遗漏了什么在启动之后就有报警说目前只能检查到一个节点.去将 zk ...
- CDH 6.0.1 集群搭建 「Before install」
从这一篇文章开始会有三篇文章依次介绍集群搭建 「Before install」 「Process」 「After install」 继上一篇使用 docker 部署单机 CDH 的文章,当我们使用 d ...