poj2186强联通(牛仰慕)
题意:
有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕
的有多少?
思路:
想想,是不是一个环中的老牛的关系都是一样的,就是只要有一只牛仰慕了环里面的任何一只牛,那么这个环里的所有牛都将被这只牛仰慕,那好,我们进行强联通缩点,然后出度为0的那个连通快就是被所有牛都仰慕的。前提是出度为0的连通快只能有一个才行,否则就输出0.
#include<stack>
#include<stdio.h>
#include<string.h>
#define N_node 10000 + 100
#define N_edge 50000 + 500
using namespace std;
typedef struct
{
int to ,next;
}STAR;
typedef struct
{
int a ,b;
}EDGE;
EDGE edge[N_edge];
STAR E1[N_edge] ,E2[N_edge];
stack<int>sk;
int mark[N_node];
int list1[N_node] ,list2[N_node] ,tot;
int Belong[N_node] ,Cnt;
int Cout[N_node];
void add(int a ,int b)
{
E1[++tot].to = b;
E1[tot].next = list1[a];
list1[a] = tot;
E2[tot].to = a;
E2[tot].next = list2[b];
list2[b] = tot;
}
void DFS1(int s)
{
mark[s] = 1;
for(int k = list1[s] ;k ;k = E1[k].next)
if(!mark[E1[k].to])DFS1(E1[k].to);
sk.push(s);
}
void DFS2(int s)
{
mark[s] = 1;
Belong[s] = Cnt;
for(int k = list2[s] ;k ;k = E2[k].next)
if(!mark[E2[k].to]) DFS2(E2[k].to);
}
int solve(int n ,int m)
{
memset(mark ,0 ,sizeof(mark));
while(!sk.empty()) sk.pop();
for(int i = 1 ;i <= n ;i ++)
if(!mark[i]) DFS1(i);
Cnt = 0;
memset(mark ,0 ,sizeof(mark));
while(!sk.empty())
{
int xin = sk.top();
sk.pop();
if(mark[xin]) continue;
++Cnt;
DFS2(xin);
}
memset(Cout ,0 ,sizeof(Cout));
for(int i = 1 ;i <= m ;i ++)
{
int a = Belong[edge[i].a];
int b = Belong[edge[i].b];
if(a==b)continue;
Cout[a] ++;
}
int s = 0;
for(int i = 1 ;i <= Cnt ;i ++)
if(!Cout[i]) s ++;
if(s != 1) return 0;
s = 0;
for(int i = 1 ;i <= n ;i ++)
if(!Cout[Belong[i]]) s ++;
return s;
}
int main ()
{
int n ,m ,i ,a ,b;
while(~scanf("%d %d" ,&n ,&m))
{
memset(list1 ,0 ,sizeof(list1));
memset(list2 ,0 ,sizeof(list2));
tot = 1;
for(i = 1 ;i <= m ;i ++)
{
scanf("%d %d" ,&a ,&b);
add(a ,b);
edge[i].a = a;
edge[i].b = b;
}
printf("%d\n" ,solve(n ,m));
}
return 0;
}
poj2186强联通(牛仰慕)的更多相关文章
- POJ2186 强联通
题意: 有一群老牛,给你一些关系,a b表示牛a仰慕牛b,最后问你有多少个牛是被所有牛仰慕的. 思路: 假如这些仰慕关系不会出现环,那么当且仅当只有一只牛的出度为0的时候答案才 ...
- 【POJ2186】受牛仰慕的牛
受牛仰慕的牛(popular cows) 每头牛都有一个梦想:成为一个群体中最受欢迎的名牛!在一个有N(1<=N<=10,000)头牛的牛群中,给你M(1<=M<=50,00 ...
- [BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- bzoj1051: [HAOI2006]受欢迎的牛(强联通)
1051: [HAOI2006]受欢迎的牛 题目:传送门 题解: 今天又做一道水题... 强联通啊很明显 水个模板之后统计一下每个强联通分量中点的个数,再统计一下出度... 不难发现:缩点之后当且仅当 ...
- 【强联通分量缩点】【Tarjan】bzoj1051 [HAOI2006]受欢迎的牛
就是看是否有一些点,从其他任何点出发都可到达 定理:有向无环图中唯一出度为0的点,一定可以由任何点出发均可达. 所以缩点,若出度为零的点(强联通分量)唯一,则答案为该强联通分量中点的度数. 若不唯一, ...
- _bzoj1051 [HAOI2006]受欢迎的牛【强联通】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1051 保存tarjan模版. 求强联通分量,缩点. #include <cstdio& ...
- POJ 2186-Popular Cows (图论-强联通分量Korasaju算法)
题目链接:http://poj.org/problem?id=2186 题目大意:有n头牛和m对关系, 每一对关系有两个数(a, b)代表a牛认为b牛是“受欢迎”的,且这种关系具有传递性, 如果a牛认 ...
- POJ 2186 Popular Cows (强联通)
id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 655 ...
- POJ 2186 强联通分量
点击打开链接 题意:牛A喜欢牛B,若牛B喜欢牛C,则牛A喜欢牛C,问最后多少牛被其它全部牛喜欢 思路:用强联通分量进行缩点,最后形成的图是有向无环图DAG.而拓扑序的值为DAG的长度,则加一,可是最后 ...
随机推荐
- APICloud Avm.js跨端框架的优势
AVM(Application-View-Model)是APICloud推出的一个跨端的高性能 JavaScript框架,更趋近于原生的编程体验,它提供简洁的模型来分离应用的用户界面.业务逻辑和数据模 ...
- SpringMVC-02 第一个SpringMVC程序
SpringMVC-02 第一个SpringMVC程序 第一个SpringMVC程序 配置版 新建一个Moudle , springmvc-02-hello,确定依赖导入进去了 1.配置web.xml ...
- MyBatis中模糊查询
接口 // 模糊查询 List<User> getUserLike(String value); Mapper.xml文件 <!-- 模糊查询 --> <select i ...
- docker搭建redis集群和Sentinel,实现故障转移
0.引言 公司开发需要用到redis,虽然有运维自动搭建,还是记录下如何搭建redis集群和Sentinel. 采用的是vagrant虚拟机+docker的方式进行搭建. 搭建思路: 首先是借鉴下其他 ...
- WAV16T VPX国产化千兆交换板
WAV16T是基于盛科CTC5160设计的国产化3U三层千兆VPX交换板,提供16路千兆电口,采用龙芯 2K1000处理器.支持常规的L2/L3协议,支持Telnet.SNMP.WEB,CLI等多 ...
- 【linux】Linux删除文件后磁盘依旧占用空间的问题
转自https://blog.51cto.com/2483526/798379 感谢 1.用df 检查发现/根目录可用空间为0 [root@/]#df -h 2.用du检查发现各目录占用的空间都很少, ...
- Python基础【while循环】
Python基础[while循环] 1.while循环: 格式 while 条件: ...... print(......) 注意,在while语句也可以嵌套else,但是else不执行循环,执行后直 ...
- android分析之Thread类
线程与线程类要区分开来. 抽象来说,线程是CPU调度的最小单位,但是线程总要执行代码,这个代码就在线程类里说明(即Thread类).无论如何,Thread只是一个类,但其功能就是"启动一个线 ...
- k8s 日志收集之 EFK
如今越来越多的应用部署在容器之中,如何收集日志也是一个很重要的问题.服务出问题了,排查问题需要给开发看日志.服务一般会在多个不同的 pod 中,一个一个的登进去看也的确不方便.业务数据统计也需要日志. ...
- python之pillow模块学习--验证码的生成和破解
一.基础学习 在Python中,有一个优秀的图像处理框架,就是PIL库,pip install pillow 示例1 from PIL import Image # 读取当前图片 im = Image ...