题目描述:

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

输入:

第一行三个数,K,N,M

接下来K+1行,每行一个数表示牛所在的牧场

接下来M+1行,每行两个数A,B,表示有一条A到B的有向边

输出:

符合题意的牧场个数

样例输入:

2 4 4
2
3
1 2
1 4
2 3
3 4

样例输出:

2

思路:

此题就是先建图,相邻两个农场在一起,再dfs每个农场,此时就需要用到标记数组,如果,此点没被走过,那么将其dfs,那么这个点的所能到的牧场的数量+1,最后再去判断每个牧场,如果这个牧场能与所有牧场联通,就是一个符合条件的牧场。最后输出总量即可。

代码:

#include <bits/stdc++.h>
using namespace std;
int vis[1010];
int k,n,m,ans;
int cow[1010],farm[1010];
vector <int> G[1010];
void dfs(int x)
{
vis[x]=1;
cow[x]++;
for(int i=0;i<G[x].size();i++){
if(vis[G[x][i]] == 0){
dfs(G[x][i]);
}
}
}
int main()
{
int A,B;
cin>>k>>n>>m;
for(int i=1;i<=k;i++) cin>>farm[i];
for(int i=1;i<=m;i++)
{
cin>>A>>B;
G[A].push_back(B);
}
for(int i=1;i<=k;i++) {
for(int j=1;j<=n;j++){
vis[j]=0;
}
dfs(farm[i]);
}
for(int i=1;i<=n;i++){
if(cow[i]==k){
ans++;
}
}
cout<<ans;
return 0;
}

最新文章

  1. Spark基础知识汇总
  2. Beginning Scala study note(9) Scala and Java Interoperability
  3. Excel自文本导入内容时如何做到单元格内换行
  4. ICA和PCA
  5. 【学】jQuery的源码思路5——增加class的操作
  6. C++对象模型详解
  7. Android 设置EditText光标Curso颜色及粗细
  8. WebDriver一些常见问题的解决方法【转】
  9. oracle工具 sqlplus 用户管理
  10. Linux进程笔记
  11. Longest Substring Without Repeating Characters - 哈希与双指针
  12. androidStudio通过svn进行版本控制
  13. js实现轮播图效果(附源码)--原生js的应用
  14. 《设计模式之禅》--MVC框架
  15. FCC JS基础算法题(9):Mutations(比较字符串)
  16. docker下运行labview2010
  17. c标签取数组中的对象值的2种方法
  18. linux达人养成计划学习笔记(三)—— 帮助命令
  19. 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef
  20. Java编辑PPT的柱状图,与内嵌的Excel联动

热门文章

  1. 用 Python 为接口测试自动生成用例
  2. 用NetworkX生成并绘制(带权)无向图
  3. centos7安装zabbix5.0
  4. 机构:DARPA
  5. 利用ArcEngine开发地图发布服务,将mxd文档一键发布成wmts,并根据需要对地图进行空间查询,返回客户端geojson
  6. 455. Assign Cookies - LeetCode
  7. 482. License Key Formatting - LeetCode
  8. 人脸识别库 face_recognition
  9. 隐式转换导致的cpu负载近100%
  10. 『忘了再学』Shell基础 — 32、Shell中test测试命令详解