Cow Picnic S 更新了(在后面)
解题思路: 从每头奶牛的节点开始做搜索,用dfs走遍所有路径(走到底,不回头)。每遍历到一个节点该节点遍历次数就加一,最后所有奶牛都搜索完之后,检查每个节点的遍历次数,如果该节点的遍历次数等于奶牛数则该节点能被所有奶牛走到。
坑:
1.每头奶牛搜索的时候要有清空的vis数组记录走没走过该点,否则可能路径会重复循环。
2.要用邻接矩阵mp[i][j]来记录节点的连接关系 ,其中i 是起点的编号 , j 是终点的编号, 矩阵的值为1时表示i 到 j 可以连接,0表示没有。
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1010;
4 int k,n,m,l[N]={0},vis[N]={0},mp[N][N]={0},vis1[N]={0};
5 void dfs(int x)
6 {
7 vis1[x]=1;
8 vis[x]++;
9 for(int i=1;i<=n;i++)
10 {
11 if(mp[x][i]==1&&vis1[i]==0)
12 {
13 dfs(i);
14 }
15 }
16 }
17 int main()
18 {
19 cin>>k>>n>>m;
20 for(int i=1;i<=k;i++)
21 {
22 scanf("%d",&l[i]);
23 }
24 for(int i=1;i<=m;i++)
25 {
26 int a1,b;
27 scanf("%d%d",&a1,&b);
28 mp[a1][b]=1;
29 }
30 for(int i=1;i<=k;i++)
31 {
32 memset(vis1,0,sizeof(vis1));
33 dfs(l[i]);
34 }
35 int ans=0;
36 for(int i=1;i<=n;i++)
37 {
38 if(vis[i]==k) ans++;
39 }
40 cout<<ans<<endl;
41 return 0;
42 }
更新了:
有优化方案:
新思路≈图存储方式、遍历方式优化
就用一个vector(二维)来记录一个节点跟所有连接节点的关系。
还有亿个细节值得注意:
因为这里是有向表所以 1 edge[a1].push_back(b);
如果是无向表 1 edge[a1].push_back(b); 2 edge[b].push_back(a1);
以及dfs中的for循环要改一下。i的范围: [0,edge[x].size()-1]
效果:
存储效率,循环效率更高
效果如图所示,提交编号为188624的为优化前的提交记录耗时80ms,提交编号为189772的为优化后的提交记录耗时9ms
程序:
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1005;
4 int k,n,m,l[N]={0},vis[N]={0},mp[N][N]={0},vis1[N]={0};
5 vector<int> edge[N];
6 void dfs(int x)
7 {
8 vis1[x]=1;
9 vis[x]++;
10 for(int i=0;i<edge[x].size();i++)
11 {
12 if(vis1[edge[x][i]]==0)
13 {
14 dfs(edge[x][i]);
15 }
16 }
17 }
18 int main()
19 {
20 cin>>k>>n>>m;
21 for(int i=1;i<=k;i++)
22 {
23 scanf("%d",&l[i]);
24 }
25 for(int i=1;i<=m;i++)
26 {
27 int a1,b;
28 scanf("%d%d",&a1,&b);
29 edge[a1].push_back(b);
30 }
31 for(int i=1;i<=k;i++)
32 {
33 memset(vis1,0,sizeof(vis1));
34 dfs(l[i]);
35 }
36 int ans=0;
37 for(int i=1;i<=n;i++)
38 {
39 if(vis[i]==k) ans++;
40 }
41 cout<<ans<<endl;
42 return 0;
43 }
Cow Picnic S 更新了(在后面)的更多相关文章
- Bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 深搜,bitset
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 554 Solved: 346[ ...
- BZOJ 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐( dfs )
直接从每个奶牛所在的farm dfs , 然后算一下.. ----------------------------------------------------------------------- ...
- 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 432 Solved: 270[ ...
- bzoj1648 / P2853 [USACO06DEC]牛的野餐Cow Picnic
P2853 [USACO06DEC]牛的野餐Cow Picnic 你愿意的话,可以写dj. 然鹅,对一个缺时间的退役选手来说,暴力模拟是一个不错的选择. 让每个奶牛都把图走一遍,显然那些被每个奶牛都走 ...
- POJ3256:Cow Picnic
Cow Picnic Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5432 Accepted: 2243 Descri ...
- 洛谷——P2853 [USACO06DEC]牛的野餐Cow Picnic
P2853 [USACO06DEC]牛的野餐Cow Picnic 题目描述 The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ ...
- 洛谷 P2853 [USACO06DEC]牛的野餐Cow Picnic
P2853 [USACO06DEC]牛的野餐Cow Picnic 题目描述 The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ ...
- POJ 3256 Cow Picnic
Cow Picnic Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4928 Accepted: 2019 Descri ...
- 洛谷P2853 [USACO06DEC]牛的野餐Cow Picnic
题目描述 The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ 100) cows is grazing in one of N ...
- BZOJ 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
Description The cows are having a picnic! Each of Farmer John's K (1 <= K <= 100) cows is graz ...
随机推荐
- 秀++视频算法仓库-厂家对接规约V5
一.概要 (1)每个算法厂家在秀++云平台上会有一个厂商标识,譬如CS101:算法厂家可能有多个算法引擎,每个引擎有一个标识譬如Q101,引擎可以理解为一个可执行程序,可以同时分析多路算法:每个算法在 ...
- VO层
springboot中vo的作用: VO:View Object,视图层,其作用是将指定页面的展示数据封装起来,通常用于业务层之间的数据传递. 一般将vo层放置在model层下 类似于将前端页面传输的 ...
- bootstrap-table参数
table.bootstrapTable({ url:'/Home/geurl', //请求后台的URL(*) method:'get', //请求方式(*) toolbar:'#toolbar', ...
- SPFA和链式前向星
链式前向星 一种存储图的数据结构 建立一个结构体和一个数组加一个变量,这里的to代表边\((u,v)\)中的\(v\)结点,而\(edge\)数组的索引\(idx\)代表\(u\),其中\(w\)代表 ...
- C温故补缺(六):C反汇编常用的AT&Tx86语法
C语言反汇编用到的AT&T x86汇编语法 参考:CSDN1,CSDN2 默认gcc -S汇编出的,以及反汇编出的,都是AT&T x86代码,可以用-masm=intel指定为inte ...
- postman的运用
链接: https://pan.baidu.com/s/1gfaKoAv 密码: dp7t 最近要测试和其他系统对接,忽然想起了postman这款url测试神器. 现分享如下: 下载完成后解压到文件夹 ...
- 1、创建Django项目并配置settings文件
一.先安装Django第三方库 二.创建项目 新建好项目的目录是这样的 迁移数据库,注意:没有安装pymysql的需要通过pip install pymysql安装. 三.创建模块 四.设置setti ...
- 【Linux】个人笔记本安装Centos并开放22端口供外网连接
〇.参考资料 一.配置及安装内容 (一)配置 [today]低配笔记本(装centos):4+500G 个人电脑(装三个节点的虚拟机集群环境):8+628G (二)所装软件 Linux系统(可选cen ...
- vue设计与实现 第6章 ref 响应原理 笔记
ref 函数实现代码 const a = ref(1); function ref(value){ const wrapper = {value} Object.defineProperty(wrap ...
- 彻底理解Python中的闭包和装饰器(上)
什么是闭包 闭包(Closure)其实并不是Python独有的特性,很多语言都有对闭包的支持.(当然,因为Python是笔者除C/C++之外学习的第二门语言,所以也是第一次遇到闭包.)简而言之,闭包实 ...