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条能量流动关系。(数据保证输入数据符号生物学特点,且不会有重复的能量流动关系出现)1<=N<=100000 0<=m<=200000题目保证答案不会爆 int

输出格式

一个整数即食物网中的食物链条数

输入输出样例

输入 #1

10 16

1 2

1 4

1 10

2 3

2 5

4 3

4 5

4 8

6 5

7 6

7 9

8 5

9 8

10 6

10 7

10 9

输出 #1

9

【思路】

记忆化搜索

一开始我想DP然后失败了

不过貌似记忆化搜索很好想

所以我就来尝试了一哈

没有问题

【题目大意】

有向图,找完整的链的数目

(完整的链的意思是:

链的头不能有入边,链的尾不能有出边)

【题目分析】

上面已经说过

一条完整的链就是链的头不能有入边

链的尾不能有出边

因为如果还有的话那就是还有可以被吃或者吃的

那这条食物链就没有结束

就不能算是一条食物链

(学过生物食物链那一部分知识的的应该都知道)

所以搜索的时候就有了目标

从头开始搜,因为头要满足没有入边

所以在建图的时候记录入度和出度

然后如果这个点没有入度

那就是可以搜的

但是还是有一个条件的

他必须要有出度才能搜

不然就成了一个没有入度也没有出度的点

也就是一种孤立的生物

所以必须满足没有入度并且有出度

这样同时也可以避免把孤立的生物算进来

这样搜索肯定是要超时的

所以就要考虑优化

【优化】

剪枝?不现实

没一条边都有可能参与到食物链的构建中去

所以剪枝的话没有剪枝的条件

那就记忆化搜索吧

反正每个点之后会有多少条食物链都是一定的

那就开一个数组记录每个点之后有多少条食物链

这样如果数组里面有值

那就直接加上就好了

否则就搜一下然后记录起来

【完整代码】

#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
const int Max = 200005;
struct node
{
int y,ne;
}a[Max];
int head[Max >> 1],sum = 0;
void add(int x,int y)
{
a[++ sum].y = y;
a[sum].ne = head[x];
head[x] = sum;
}
int ru[Max >> 1],chu[Max >> 1];
int dp[Max >> 1];
int ans = 0; int dfs(int x)
{
if(dp[x] != 0)return dp[x];
int ans = 0;
if(ru[x] != 0 && chu[x] == 0)
ans ++;
for(register int i = head[x];i != 0;i = a[i].ne)
{
ans += dfs(a[i].y);
}
dp[x] = ans;
return ans;
} signed main()
{
int n,m;
cin >> n >> m;
int a,b;
for(register int i = 1;i <= m;++ i)
{
cin >> a >> b;
add(a,b);
chu[a] ++;
ru[b] ++;
}
int tot = 0;
for(register int i = 1;i <= n;++ i)
if(ru[i] == 0 && chu[i] != 0)
tot += dfs(i);
cout << tot << endl;
return 0;
}

洛谷 P3183 [HAOI2016]食物链 题解的更多相关文章

  1. 洛谷——P3183 [HAOI2016]食物链

    P3183 [HAOI2016]食物链 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形 ...

  2. 洛谷 P3183 [HAOI2016]食物链

    题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...

  3. 洛谷 P4017 最大食物链计数

    洛谷 P4017 最大食物链计数 洛谷传送门 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写 ...

  4. 动态规划 洛谷P4017 最大食物链计数——图上动态规划 拓扑排序

    洛谷P4017 最大食物链计数 这是洛谷一题普及/提高-的题目,也是我第一次做的一题 图上动态规划/拓扑排序 ,我认为这题是很好的学习拓扑排序的题目. 在这题中,我学到了几个名词,入度,出度,及没有环 ...

  5. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  6. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  7. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  8. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  9. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

随机推荐

  1. ELK 索引生命周期管理

    kibana 索引配置 管理索引 点击设置 --- Elasticsearch 的 Index management 可以查看 elk 生成的所有索引 (设置,Elasticsearch ,管理) 配 ...

  2. ssm框架 pom的配置 / 还有里面springMVC.xml的配置 / webapp.xml的配置

    首先是pom的配置: <dependencies> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-jav ...

  3. java之mybatis之模糊查询

    1.在 mybatis 中,模糊查询可以有以下方式 (1).第一种,直接将封装好的条件传给 sql 语句 <select id="findByName" parameterT ...

  4. 关键字ref、out

    通常,变量作为参数进行传递时,不论在方法内进行了什么操作,其原始初始化的值都不会被影响: 例如: public void TestFun1() { ; TestFun2(arg); Console.W ...

  5. 使用JDK的zip编写打包工具类

    JDK自带的zip AIP在java.util.zip包下面,主要有以下几个类: java.util.zip.ZipEntryjava.util.zip.ZipInputStreamjava.util ...

  6. Python 第三方日志框架loguru使用

    解决中文乱码问题 项目地址 github: https://github.com/Delgan/loguru 文档:https://loguru.readthedocs.io/en/stable/in ...

  7. IDEA中调试时F8,F7快捷键失效

    idea中调试时F8,F7快捷键失效 原因:相关软件的快捷键占用了F8,F7,如我的有道词典占用F8了这个快捷键,导致idea调试时不能使用F8,改变有道词典的快捷键即可.

  8. Mysql中类似于oracle中nvl()函数的ifnull()函数

    IFNULL(expr1,expr2)  如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境.  my ...

  9. 纽约LangeEylandt长岛LongIsland

    LangeEylandt n.长岛(美国) 纽约长岛 纽约长岛 (LongIsland)是北美洲在大西洋内的一个岛,最早追溯到十七世纪的1650年被命名为Lange Eylandt [1] ,位于北美 ...

  10. mysql表的创建、查看、修改、删除

    一.创建表 创建表前先使用use 数据库名进入某一个数据库,创建表语句的格式如下: create table 表名称 ( 列名1 列的数据类型 [约束], 列名2 列的数据类型 [约束], 列名2 列 ...