每日一题冲刺大厂第十三天 cow

简介: 大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!

今日题目:cow


题目描述


The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ 100) cows is grazing in one of N (1 ≤ N ≤ 1,000) pastures, conveniently numbered 1...N. The pastures are connected by M (1 ≤ M ≤ 10,000) one-way paths (no path connects a pasture to itself).


The cows want to gather in the same pasture for their picnic, but (because of the one-way paths) some cows may only be able to get to some pastures. Help the cows out by figuring out how many pastures are reachable by all cows, and hence are possible picnic locations.


K(1≤K≤100)只奶牛分散在N(1≤N≤1000)个牧场.现在她们要集中起来进餐.牧场之间有M(1≤M≤10000)条有向路连接,而且不存在起点和终点相同的有向路.她们进餐的地点必须是所有奶牛都可到达的地方.那么,有多少这样的牧场呢?


输入格式


Line 1: Three space-separated integers, respectively: K, N, and M


Lines 2..K+1: Line i+1 contains a single integer (1..N) which is the number of the pasture in which cow i is grazing.


Lines K+2..M+K+1: Each line contains two space-separated integers, respectively A and B (both 1..N and A != B), representing a one-way path from pasture A to pasture B.


输出格式


Line 1: The single integer that is the number of pastures that are reachable by all cows via the one-way paths.


题目分析


题目难度:⭐️


题目涉及算法:dfs,队列。


ps:有能力的小伙伴可以尝试优化自己的代码或者一题多解,这样能综合提升自己的算法能力


题解报告:


1.思路


这题我选择的dfs,搜牧场不行 70%,因为有向图换了一下方向 让牛找牧场 就过了


2.代码


#include <bits/stdc++.h>
using namespace std;
const int N = 1011;
int k,n,m,c,sum;
int a[N][N],b[N],arr[N][N];
int dfs(int p)
{
  for(int i=1;i<=n;i++)
  {
    if(arr[c][i]==0&&a[p][i])
    {
      arr[c][i]=1;
      dfs(i);
    }
  }
}
int main()
{
  cin>>k>>n>>m;
  if(k==1)
  {
    cin>>c;
    cout<<c;
    return 0;
  }
  for(int i=1;i<=k;i++)
  {
    int xx;
    cin>>xx;
    b[xx]=1;
  }
  for(int i=1;i<=m;i++)
  {
    int p1,p2;
    cin>>p1>>p2;
    a[p1][p2]=1;
  }
  for(int i=1;i<=n;i++)
  {
    if(b[i]==1)
    {
      c=i;
      arr[i][i]=1;
      dfs(i);
    }
  }
  for(int i=1;i<=n;i++)
  {
    int sum=1;
    for(int j=1;j<=n;j++)
    {
      if(arr[j][i]==0&&b[j])
      {
        sum=0;
      }
    }
    if(sum==1)
    {
      sum++;
    }
  }
  cout<<sum;
  return 0;
}


目录
相关文章
|
缓存 数据库
实现微信扫描二维码关注公众号,直接注册登录网站
互联网时代,不管是以哪种形式存在的应用,移动端或者PC网站,注册登录功能是用户访问应用的第一步,可以说,注册登录用的方不方便在一定程度上能决定用户的去留。对于用户来说,能够越简单,不用动手做过多操作就能达到同样效果的功能是最好不过的。今天就来介绍一下PC网站如何通过扫描微信二维码关注公众号,直接完成注册登录。
2134 0
实现微信扫描二维码关注公众号,直接注册登录网站
工作流(Activiti 6.0)之自由驳回任务实现
工作流版本使用6.0,参数为任务id(task中主键),目标节点ID(比如userTask1),以及业务主键信息(businessKey)。
|
JavaScript 前端开发
vue实现公告文字横向滚动
vue实现公告文字横向滚动
1938 0
|
数据采集 运维 数据挖掘
一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示
一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示
1670 0
一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示
|
SQL 消息中间件 Java
SpringBoot整合RocketMQ发送消息过滤
消息者在进行消息订阅时,除了可以指定要订阅消息的Topic外,还可以对指定Topic中的消息根据指定条件进行过滤,即可以订阅比Topic更加细粒度的消息类型。 对于指定Topic消息的过滤有两种过滤方式:Tag过滤与SQL过滤
|
Web App开发 存储 缓存
轻量应用服务器: 1核2G能干什么
一开始买这台服务器,是只打算搭一个博客。
906 0
轻量应用服务器: 1核2G能干什么
|
人工智能 算法 C语言
C/C++中的素数判定
素数又称质数。如何有效判断素数?暴力试除、筛法。埃氏筛、欧拉筛,动图演示、代码实例。
368 1
C/C++中的素数判定
|
存储 Linux 计算机视觉
Linux之RAID介绍、软RAID6实操配置(失望攒够了就放手,不打扰是我最后的温柔)(二)
Linux之RAID介绍、软RAID6实操配置(失望攒够了就放手,不打扰是我最后的温柔)(二)
703 0
Linux之RAID介绍、软RAID6实操配置(失望攒够了就放手,不打扰是我最后的温柔)(二)
Lodash学习之集合扁平化
Lodash学习之集合扁平化
908 0
Lodash学习之集合扁平化