BZOJ 4562|HAOI 2016|食物链|动态规划
2016-04-27 21:42
387 查看
写水题掉RP啦
我记得这个还是去年学长研究性学习的内容之一。。不过很水就是了。。
不想写拓扑排序了,所以写了记忆化搜索。
现在给你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
题目保证答案不会爆 int
我记得这个还是去年学长研究性学习的内容之一。。不过很水就是了。。
题目大意
求食物网的食物链条数题解
DAG DP不想写拓扑排序了,所以写了记忆化搜索。
#include <stdio.h> const int N = 100005, M = N * 2; int dp , h , p[M], v[M], in , entry , cnt = 0; void add(int a, int b) { p[++cnt] = h[a]; v[cnt] = b; h[a] = cnt; ++in[b]; } void dfs(int x) { for (int i = h[x]; i; i = p[i]) { dp[v[i]] += dp[x]; --in[v[i]]; if (!in[v[i]]) dfs(v[i]); } } int main() { int n, m, i, a, b, ans = 0; scanf("%d%d", &n, &m); while (m--) scanf("%d%d", &a, &b), add(a, b); for (i = 1; i <= n; ++i) entry[i] = !in[i] && h[i]; for (i = 1; i <= n; ++i) if (entry[i]) dp[i] = 1, dfs(i); for (i = 1; i <= n; ++i) if (!h[i]) ans += dp[i]; printf("%d", ans); return 0; }
4562: [Haoi2016]食物链
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和m,接下来m行每行两个整数ai bi描述m条能量流动关系。(数据保证输入数据符号生物学特点,且不会有重复的能量流动关系出现)
1<=N<=100000 0<=m<=200000
题目保证答案不会爆 int
Output
一个整数即食物网中的食物链条数Sample Input
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
Sample Output
9
相关文章推荐
- bzoj 3823: 定情信物
- STL浅析
- poj2762 Going from u to v or from v to u? 强连通分量 + 拓扑排序
- 每日Scrum(9)
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
- java中final与static的区别
- 队列和栈
- Java基础
- 2015级C++第10、11周实践项目 继承和派生
- 内存泄露会导致程序可用内存耗尽,然后崩溃
- poj2793 素数和
- Xamarin.Forms WebView
- 牛客网今日头条笔试详解
- 搭建gpu的theano
- C++学习(一)——标准库类型之string全解析
- 博客开通,记一下自己的用户名由来
- 再谈谈列表元素的删除
- 使用javaFX编辑的学生管理系统
- 斯坦福第十二课:支持向量机(Support Vector Machines)
- php整理(四): mysql