[HAOI2016]食物链

OJ题号:BZOJ4562、洛谷3183

思路:记忆化搜索。

本体可以转化成“求有向图中入度为0的结点到出度为0的结点的路径数”。

每次加边时记录每个结点的入度和出度,然后从入度为0的结点开始搜索,搜到出度为0的结点。

搜索到越底层,重复的路径越多,所以就要用记忆化的思想,将每个结点出发的路径个数记录下来,第二次搜到时直接调用。

 1 #include<cstdio>
 2 #include<vector>
 3 const int N=100001;
 4 std::vector<int> e[N];
 5 int in_degree[N]={0};
 6 void add_edge(const int a,const int b) {
 7     e[a].push_back(b);
 8     in_degree[b]++;
 9 }
10 bool isroot(const int x) {
11     return !in_degree[x];
12 }
13 bool isleaf(const int x) {
14     return !e[x].size();
15 }
16 int f[N]={0};
17 int dfs(const int x) {
18     if(f[x]) return f[x];
19     if(isleaf(x)) return f[x]=1;
20     int ans=0;
21     for(int i=0;i<(int)e[x].size();i++) {
22         ans+=dfs(e[x][i]);
23     }
24     return f[x]=ans;
25 }
26 int main() {
27     int n,m;
28     scanf("%d%d",&n,&m);
29     for(int i=1;i<=m;i++) {
30         int a,b;
31         scanf("%d%d",&a,&b);
32         add_edge(a,b);
33     }
34     int ans=0;
35     for(int i=1;i<=n;i++) {
36         if(isroot(i)&&!isleaf(i)) ans+=dfs(i);
37     }
38     printf("%d\n",ans);
39     return 0;
40 }
时间: 2024-08-21 19:41:03

[HAOI2016]食物链的相关文章

洛谷 P3183 [HAOI2016]食物链

P3183 [HAOI2016]食物链 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 输入输出格式 输入格式: 第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系.(数据保证输入数据符号生物学特点,且不会有

P3183 [HAOI2016]食物链

P3183 [HAOI2016]食物链 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 输入输出格式 输入格式: 第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系.(数据保证输入数据符号生物学特点,且不会有

luogu P3183 [HAOI2016]食物链

二次联通门 : luogu P3183 [HAOI2016]食物链 /* luogu P3183 [HAOI2016]食物链 记忆化搜索 */ #include <cstdio> #include <iostream> const int BUF = 12312312; char Buf[BUF], *buf = Buf; inline void read (int &now) { for (now = 0; !isdigit (*buf); ++ buf); for (;

bzoj4562 [Haoi2016]食物链

4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MB Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 b2 a3 b3 ...... am-1 bm-1 am bm 其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 Input 第一行两个整数n

bzoj4562: [Haoi2016]食物链--记忆化搜索

这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有返回值加起来就是答案. “注意单独的一种孤立生物不算一条食物链.”出题人都这么好心的说了,然而第一次交的时候还是忘了= =结果成为此题第一个WA的人hh 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm&g

洛谷 P3183 BZOJ 4562 [HAOI2016]食物链

题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 输入输出格式 输入格式: 第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系.(数据保证输入数据符号生物学特点,且不会有重复的能量流动关系出现)1<=N<=1

LuoguP3183 [HAOI2016]食物链 记忆化搜索

题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 输入输出格式 输入格式: 第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系.(数据保证输入数据符号生物学特点,且不会有重复的能量流动关系出现)1<=N<=1

bzoj4562【HAOI2016】食物链

4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 216  Solved: 173 [Submit][Status][Discuss] Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 b2 a3 b3 ...... am-1 bm-1 am bm 其中ai

【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)

4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 133  Solved: 112[Submit][Status][Discuss] Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 b2 a3 b3 ...... am-1 bm-1 am bm 其中ai bi