HA真是弱……

原题:

1.食物链
【问题描述】
如图所示为某生态系统的食物网示意图,据图回答第1小题.

1.数一数,在这个食物网中有几条食物链(  )
现在给你n个物种和m条能量流动关系,求其中的食物链条数。
物种的名称为从1到n编号
M条能量流动关系形如
a1 b1
a2 b2
a3 b3
......
am-1 bm-1
am bm
其中 ai bi 表示能量从物种ai 流向物种bi

1<=N<=100000  0<=m<=200000

数据保证输入数据符合生物学特点,且不会有重复的能量流动关系出现

首先因为数据保证输入数据符合生物学特点,所以不用考虑环了,不会有重复的能量流动关系出现所以也不用考虑重边

然后很容易想出来递归一下,每个节点都加上出边对应的点的方案数,出边对应点的方案数递归到下一层求

这样每个节点的方案数就是从这个节点到某个没有出边的点的方案数,把这个节点的方案数加到上一层,上一层的点所有出边对应的点的方案数加起来就是上一层点的方案数

这个应该很好想

为了防止重复计算加上记忆化搜索,每个点至多访问一次,复杂度是满足的

但是有一个问题,最坏10^5层递归会把栈炸掉,这个时候就要把递归转化成迭代

然后用拓扑排序,这次反向建边,然后反向拓扑,这个节点的出边对应的节点加上这个节点的方案数即可,效果和上面的递归是等效的

加一个汇t方便计数(网络流做傻系列(注意如果这样做的话边的数组就要开大点

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
const int oo=;
struct ddd{int next,y;}e[]; int LINK[],ltop=,in_degree[];
inline void insert(int x,int y){e[++ltop].next=LINK[x];LINK[x]=ltop;e[ltop].y=y; in_degree[y]++;}
int n,m; int t;
int QUEUE[],head=;
int f[];
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m; t=n+;
int _left,_right;
while(m --> ){
_left=read(),_right=read();
insert(_right,_left);
}
for(int i=;i<=n;i++)if(!in_degree[i] && LINK[i]) QUEUE[++head]=i,f[i]=;
for(int i=;i<=n;i++)if(!LINK[i]) insert(i,t);
for(int k=;k<=head;k++)
for(int i=LINK[QUEUE[k]];i;i=e[i].next){
in_degree[e[i].y]--,f[e[i].y]+=f[QUEUE[k]];
if(!in_degree[e[i].y]) QUEUE[++head]=e[i].y;
}
cout<<f[t]<<endl;
return ;
}

【HAOI2016】食物链的更多相关文章

  1. bzoj 4562 [Haoi2016]食物链

    4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MB Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 ...

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

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

  3. 洛谷 P3183 [HAOI2016]食物链 题解

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

  4. [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划

    食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点. 注释:$1\le n\le 1 ...

  5. BZOJ4562: [Haoi2016]食物链

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

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

    这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...

  7. 【题解】 [HAOI2016]食物链 (拓扑排序)

    懒得复制,直接贴链接吧 Solution: 水题一道,注意单独一个点的不算在食物链中,也就是\(in[i]==0\) \(out[i]==0\)的点就不计算 Code: //It is coded b ...

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

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

  9. P3183 [HAOI2016]食物链

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

  10. 【bzoj4562】[Haoi2016]食物链 拓扑排序+dp

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832118.html 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动 ...

随机推荐

  1. [.NET开发] C# 如何更改Word语言设置

    一般在创建或者打开一个Word文档时,如果没有进行过特殊设置的话,系统默认的输入语言的是英语输入,但是为适应不同的办公环境,我们其实是需要对文字嵌入的语言进行切换的,因此,本文将介绍如何使用Spire ...

  2. 当保存在Session中的对象,取出后,在外部发生改变时会怎样

    return_reason_model model = new return_reason_model(); model.F_RetunrnReason = "; HttpContext.S ...

  3. Serega and Fun CodeForces - 455D (分块 或 splay)

    大意:给定n元素序列, 2种操作 将区间$[l,r]$循环右移1位 询问$[l,r]$中有多少个等于k的元素 现在给定q个操作, 输出操作2的询问结果, 强制在线 思路1: 分块 每个块内维护一个链表 ...

  4. hpu积分赛(回溯法)

    问题 : 不开心的小明① 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 1 题目描述 一天, 小明很不开心,先是向女神表白被拒, 数学又考了0分, 回家的路上又丢了钥匙, 他非 ...

  5. Andriod给textview文本关键字循环标亮加粗

    在开发中,搜索到得关键字信息在展示时,通常需要标亮加粗,如下图(截取自蓝鲸医生助手搜索后的结果) 在文本中,关键字是“嘎”,所有“嘎”字都标亮加粗,标亮就是换种颜色.这里就要用到SpannableSt ...

  6. List原理

    ArrayList: ArrayList是一个可变数组实现,实现了List接口的所有方法,并允许存取null值.ArrayList基本上等同与Vector,但它只对writeObject()和read ...

  7. Activiti进阶(二)——部署流程资源的三种方式

    转自:http://blog.csdn.net/zjx86320/article/details/50234707 流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取.下面介绍常用的 ...

  8. 安装完DevExpress14.2.5,如何破解它呢?

    DevExpress是一个界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.DevExpress开发的控件有很强的实力,不仅功能丰富,应用简单,而且界面华丽,更可方便订制,方便开发人员开 ...

  9. js上传图片前预览方法(支持预览多个图片)

    运用js实现上传图片前的预览(支持多张图片),实现的例子如下: 1.源码例子: 1)Js脚本页面 <!doctype html> <html> <head> < ...

  10. hadoop kafka import/export data (8)

    reference: http://kafka.apache.org/quickstart need to solve issue ISSUE 1: [2019-01-29 15:59:39,272] ...