当前位置: 首页 > news >正文

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);
}

相关文章:

  • mac m1安装homebrew管理工具(brew命令)完整流程
  • 【源码】2024完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城
  • uniapp中二次封装jssdk和使用
  • 如何让你的网站能通过域名访问
  • 【数据结构】探索树中的奇妙世界
  • 断开自定义模块与自定义库的链接
  • 网易面试:手撕定时器
  • 滑动窗口模板(Java)
  • JAVA-->方法的使用详解
  • 勒索病毒的策略与建议
  • 记录使用 Vue3 过程中的一些技术点
  • 一种最大重叠离散小波包特征提取和支持向量机的ECG心电信号分类方法(MATLAB 2018)
  • 【UE5.1 角色练习】08-物体抬升、抛出技能 - part2
  • shell脚本:将一维数组以二维数组显示
  • 设计模式 18 迭代器模式 Iterator Pattern
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • const let
  • java中具有继承关系的类及其对象初始化顺序
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • React-Native - 收藏集 - 掘金
  • 从输入URL到页面加载发生了什么
  • 给第三方使用接口的 URL 签名实现
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 扑朔迷离的属性和特性【彻底弄清】
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 学习笔记:对象,原型和继承(1)
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (九)One-Wire总线-DS18B20
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net下简单快捷的数值高低位切换
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ Linux ] Linux信号概述 信号的产生
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [BSidesCF 2019]Kookie1
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ 4598][Sdoi2016]模式字符串