【HAOI2016】食物链
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】食物链的更多相关文章
- bzoj 4562 [Haoi2016]食物链
4562: [Haoi2016]食物链 Time Limit: 10 Sec Memory Limit: 128 MB Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 ...
- 洛谷——P3183 [HAOI2016]食物链
P3183 [HAOI2016]食物链 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形 ...
- 洛谷 P3183 [HAOI2016]食物链 题解
P3183 [HAOI2016]食物链 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形 ...
- [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点. 注释:$1\le n\le 1 ...
- BZOJ4562: [Haoi2016]食物链
Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 ...
- bzoj4562: [Haoi2016]食物链--记忆化搜索
这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...
- 【题解】 [HAOI2016]食物链 (拓扑排序)
懒得复制,直接贴链接吧 Solution: 水题一道,注意单独一个点的不算在食物链中,也就是\(in[i]==0\) \(out[i]==0\)的点就不计算 Code: //It is coded b ...
- LuoguP3183 [HAOI2016]食物链 记忆化搜索
题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...
- P3183 [HAOI2016]食物链
题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...
- 【bzoj4562】[Haoi2016]食物链 拓扑排序+dp
原文地址:http://www.cnblogs.com/GXZlegend/p/6832118.html 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动 ...
随机推荐
- 手动添加 launcher 到 Ubuntu Unity
本来,启动程序之后,在左边的launcher bar点右键,[Lock to Launcher]就可以的. 但是,有时候因为某种原因,需要手工添加. 这时候,就要参考下面的文章了 http://ask ...
- Windows 2008 更改网卡绑定顺序
用 ncpa.cpl 或者用鼠标右键点网上邻居进去也好. 来到网卡列表画面. 然后,你会发觉没有菜单去操作[高级设置], 这里,最高级的步骤来了, 就是你需要按一个 [Alt]把菜单给显示出来,太神奇 ...
- 微信公众号菜单添加小程序,miniprogram,pagepath参数详解,php开发公众号
随着微信小程序功能的开发, 已经可以跟公众号打通了, 主要有两种方式: 1) 在公众号文章中插入小程序 2) 在公众号菜单中添加小程序 第一种方式, 子恒老师在前面的课程已经详细介绍过, 今天来讲第二 ...
- ArcGIS API for Silverlight 的重要内容******重要
ArcGIS Silverlight API:是构建在微软Silverlight平台之上,通过ArcGIS Server Rest API消费ArcGIS Server 服务,同时支持直接消费Bing ...
- codeforces 555a//Case of Matryoshkas// Codeforces Round #310(Div. 1)
题意:1-n的数字,大的在小的后面,以这种规则已经形成的几个串,现在要转为一个串,可用的操作是在末尾拆或添加,问要操作几次? 模拟了很久还是失败,看题解才知道是数学.看来这种只要结果的题,模拟很不合算 ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
- en_java去重排序
@Test public void tes5() { String[] strs ={"e", "ee", "ea", "ei&q ...
- 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Awk 从入门到放弃(1)–学习笔记
参考:朱双印博客 1. 将test文件中的内容打印出来:vmuser@vmuser-virtual-machine:~/panzidong/awk$ echo ddd > testvmuser@ ...
- Openwrt TF Card Auto Mount&Check (4)
1 Scope of Document This document describes tf card bootup auto do file system check when mount ...