有向图的汇点 -- 兼 ACM PKU POJ 2186 ( Popular Cows ) 解题报告

本文介绍了如何解决POJ 2186(Popular Cows)问题,涉及有向图上的汇点(sink)和强连通子图的概念。通过分析有向图的性质,如至少两个顶点的出度为0时无最受欢迎的奶牛,以及有向无环图(DAG)的唯一汇点性质,提出了一种O(V+E)时间复杂度的解题算法,避免了建立超级图和转置图的过程。
摘要由CSDN通过智能技术生成

题目链接:http://poj.org/problem?id=2186

题意:奶牛的梦想是成为牛群中最受欢迎的奶牛,即受其它所有牛的欢迎。“欢迎”是具有传递性,即如果牛A认为牛B受欢迎,牛B觉得牛C受欢迎,则牛A也隐含地认为牛C受欢迎。现在,给一组点对 (A,B) 表示 A 认为 B 受欢迎,找出有多少最受欢迎的奶牛。

 

这是一个有向图上的问题。用图上的顶点表示奶牛,有向边 (A,B) 表示 A 变为 B 受欢迎,则最受欢迎的牛是那些能被其它顶点所到达的顶点。最暴力的解法是,对每一个顶点,判断是否能够为其它所有的顶点所到达。这个算法的复杂度是 O(V2E),其中,V 为顶点数量,E 为有向边的数量。对于题目的数据规模,显然会超时。

 

实际上,存在 O(V+E) 的算法。这需要我们仔细研究和分析有向图的一些性质。

 

事实一:如果图上有至少两个顶点的出度为 0,则没有顶点是最受欢迎的,即答案为 0。

 

显然,如果这个有向图上有环,则环上的奶牛意见一致,即若 C 能被环上的某点所到达,也必然能被环上的其它任意一点所到达。

 

事实二:每一个强连通子图上的奶牛们意见都一致。

 

因此,在本题中,我们可以把每一个强连通子图(及它所代表的奶牛群)当做一个整体来看待。若把每个强连通子图看成由该子图的所有顶点能过顶点压缩 (

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值