P2341 受欢迎的牛

2024-05-29 22:52
文章标签 受欢迎 p2341

本文主要是介绍P2341 受欢迎的牛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛,给你 M 对整数,表示牛 A 认为牛 B 受欢迎。这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。你的任务是求出有多少头牛被除自己之外的所有牛认为是受欢迎的。

输入描述

第一行两个数 N,M;
接下来 M 行,每行两个数 A,B,意思是 A 认为 B 是受欢迎的(给出的信息有可能重复,即有可能出现多个 A,B)。

输出描述

输出被除自己之外的所有牛认为是受欢迎的牛的数量。

样例输入
3 3
1 2
2 1
2 3
样例输出
1

我们先把这道题分成两种情况来讨论

第一种情况:不存在环

首先来画一个图

观察一下每个点的出度

在这幅图中,最受欢迎的牛是3, 那么,是否是出度为零的点就最受欢迎呢?

再来看一下

此时,点4的出度也为零,但是,这张图没有最受欢迎的牛,因为条件是除自己以外,所有人都认为它受欢迎才行,所以,在没有环情况下,如果只有一个出度为零的点,就有一头最受欢迎的牛,否则一头都没有

再来看第二种情况

第二种情况:存在环

还是来画张图

这里最受欢迎的是2,3,4

结论:有环时,先把每一个环合并成一个点,在按照没有环的方案去找,最后最受欢迎的就是那个点合并前的所有点

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
vector<int>a[N];
int dfn[N],vis[N],id[N],size[N],low[N],cd[N];
int n,m;
int times;
int scc;
stack<int>t;
void tarjan(int x){vis[x]=1;dfn[x]=low[x]=++times;t.push(x);for(int i=0;i<a[x].size();i++){int v=a[x][i];if(dfn[v]==0){tarjan(v);low[x]=min(low[x],low[v]);}else if(vis[v]==1){low[x]=min(low[x],dfn[v]);}}if(low[x]==dfn[x]){scc++;int v;do{v=t.top();t.pop();vis[v]=0;id[v]=scc;size[scc]++;}while(x!=v);}
}
main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);a[u].push_back(v);}for(int i=1;i<=n;i++){if(dfn[i]==0)tarjan(i);}for(int x=1;x<=n;x++){for(int i=0;i<a[x].size();i++){int v=a[x][i];int u1=id[x];int u2=id[v];if(u1!=u2){cd[u1]++;}}}int cnt=0,ans=0;for(int i=1;i<=scc;i++){if(cd[i]==0){ans+=size[i];cnt++;if(cnt>1){printf("0");return 0;}}}printf("%d",ans);
}

这篇关于P2341 受欢迎的牛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014865

相关文章

语言桥梁:探索全球最受欢迎的翻译工具,让理解更简单

无论是跨国商务合作、学术研究交流,还是个人旅行探索,能够即时、准确地翻译不同语言的内容,成为了连接世界的桥梁。有道翻译在线工具,作为这一需求的产物,正以前所未有的速度改变着我们的沟通方式。这次我们再来探索一下还有什么在线翻译的工具吧。 1.福晰翻译 链接直达>>https://www.foxitsoftware.cn/fanyi/  该软件具备强大的多语言翻译能力,不仅限于中英文互译,还能实

加油卡系统开发,为什么加油卡系统这么受欢迎

在汽车行业的发展下,加油已经成为了大众生活必需品,而加油卡作为大众日常给汽车加油的方式,深受大众欢迎! 随着互联网科技的发展,加油卡系统成为了一种新模式,让车主在手机上完成一系列加油操作。加油卡系统上与全国各地的加油站连接,让车主自助在线充值加油,还能享受到更加便捷优惠的服务,有助于提高加油站的收益。 加油卡系统操作简单便捷。用户将卡号填写到平台上,可以在线充值、查看余额等,在加油期间直接

万字详解Spring框架基础(Java开发社区最受欢迎的框架之一)

目录 一、spring框架搭建         1.Spring 是什么         2.Spring 体系结构  3.Spring Hello World 搭建 (1)创建一个JavaEE项目 (2)编写spring配置文件 (3)编写一个User实体集 (4)测试spring 二、IOC(控制反转) 1.基于xml配置方式实现 2.注解方式实现 三、前后端交互配置

为什么Linux 这么受欢迎?

Linux新手的常见问题之一就是——是什么使得Linux这么受欢迎?这个问题的答案是见仁见智的,例如易用性、费用、选择性、开放度、社区,等等。根本上来说,是我们能从开源软件社区学习到更多知识。为什么开源比闭源好?用烤面包机来烤面包,还要了解其工作原理?想想有哪个玩具品牌经久不衰,还延伸到了电脑游戏、甚至电影行业?答案是: LEGO。为什么乐高受欢迎?因为它附带的小册子能教你组装出封面的模型。这

为什么没人详细说过智能猫砂盆?最受欢迎的好用智能猫砂盆解析!

不知道大家有没有发现,在快节奏的现代生活中,忙碌于上班的我们会发现自己越来越难以抽出足够的时间去细心照料自己的猫咪。每次下班回家,看到猫砂盆里堆积的粪便和尿液,自己都感到一阵头痛。这时,我开始考虑起智能猫砂盆的便利。 智能猫砂盆的出现,则为我解决了这一大难题。它能够自动清理猫砂,减少了我频繁更换猫砂和清理猫砂盆的烦恼。然而,在决定购买智能猫砂盆之前,我也有过许多顾虑。这些顾虑让我在选择智能猫砂盆

中国最受欢迎起名大师颜廷利:价值与指甲之间的真正关系

在汉语中,“价值”一词的音序颠倒后与“指甲”发音相同。在日常生活中,人们常将指甲视作需定期修剪的附属物。这种看似简单的日常行为,实则隐含着对个人生命价值的深刻反思。当个体感到自己的生活缺乏意义时,其存在便如同那些被剪去的多余指甲,无形中成为了生活的累赘。 福建厦门、甘肃兰州、宁夏银川、青海西宁、内蒙古呼和浩特、广西桂林、江西南昌、中国最受欢迎起名大师颜廷利教授,一位21世纪的东方哲学思想家、科学

目前3个最受欢迎的免费、开源文件加密软件评测

加密猫: jiamimao.ga 是一款简单易用的文件加密解密工具,打开浏览器就能用,本地加密解密,不涉及服务器上传下载,免费、快速、安全、开源。主要用来加密本地电脑上的文件夹和文件。 官方网站:www.jiamimao.ga github开源地址:https://github.com/Corydonbyte/jiamimao 优点: 开源、免费、快速、安全。可以不用链接互联网就可以使用,

端午搞个零花钱,轻松赚取创业的第一桶金!2024最受欢迎的创业项目,2024新的创业机会

好好的端午节, 净给我添堵! 本来我打算在端午节愉快的玩耍, 结果一大早起床却看到舍友在给一堆设备充电, 然后装的整整齐齐, 满满一书包。 我好奇他小子这是要干嘛? 不会是打算今天回去给亲朋好友准备的礼物吧? 结果这小子嘿嘿一笑: 今天不回家,也不出去玩耍, 出去创业去! 我倒是奇怪了, 端午大家都在旅游, 市里连个人毛都没有, 你创业东西卖给谁? 然后舍友就

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎 国内PLM系统厂商中,要确定哪个公司的产品最受欢迎,需要考虑多个因素,包括市场份额、客户评价、技术实力、产品线完整性以及服务支持等。虽然无法直接给出一个具体的“最受欢迎”的排名,但根据参考文章中的信息,可以列举一些在市场上具有显著影响力的PLM厂商,并简要介绍其特点。 一、国内PLM系统哪个公司最受欢迎? 南宁市二零二五科技有限公司

实时监控电脑屏幕的软件是什么?三款超受欢迎的电脑监控软件

实时监控电脑屏幕的软件在现代企业管理中扮演着至关重要的角色,它们不仅帮助管理者实时监控员工的工作状态,提高工作效率,还通过数据分析和报告功能,为企业提供了优化管理流程和决策支持的依据。以下将介绍几款市面上广泛使用的实时监控电脑屏幕的软件,并探讨它们背后的故事。 一、安企神软件 安企神软件是一款功能强大的电脑屏幕监控软件,其背后的故事源于对企业数据安全和工作效率的追求。 该软件能够实时