老师开始帮我们查漏补缺啦!
我们的老师这两天给了我们一些我们没怎么学的函数和算法,比如STL的函数和拓扑排序之类的,这个题就是讲拓扑排序的。

先看题板:

题目背景
你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。 题目描述
给你一个食物网,你要求出这个食物网中最大食物链的数量。 (这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。) Delia 非常急,所以你只有 11 秒的时间。 由于这个结果可能过大,你只需要输出总数模上 80112002 的结果。 输入格式
第一行,两个正整数 n、m,表示生物种类 n 和吃与被吃的关系数 m。 接下来 mm 行,每行两个正整数,表示被吃的生物A和吃A的生物B。 输出格式
一行一个整数,为最大食物链数量模上 80112002 的结果。 输入输出样例
输入 #1复制
5 7
1 2
1 3
2 3
3 5
2 5
4 5
3 4
输出 #1复制
5
说明/提示
各测试点满足以下约定:
n<=5000

嗯,看起来不错。直接暴力找出没有天敌的动物,然后操作就可以了。

我们先看辅助斯烤的关系图(仅限样例)

题目描述告诉我们,食物链的开始点是没有天敌的动物。我们就枚举一遍所有点的入度,看见有一个是0的,就把他插进队列。

然后我们从他吃的食物里找一个,把这个食物的天敌数量-1,把食物的路径变量+=自己的路径变量(一个节点的路径变量是指:以他为末尾,有多少种包含他的食物链),如果这个食物的天敌数变成0了,就说明他的路径变量完整了。这样就可以继续搜索了。

如果一个节点没有食物就饿死了就说明他是结尾了,而且他的天敌数如果同时是0的话,就表明已经可以统计食物链条数了。(已经知道以他为末尾,有多少种包含他的食物链,而且这个节点没有食物,那就结束了。)

好了,需要主要思想已经讲完了,看看代码吧:

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int a,b,n,m,bj[5005][5005],zshu,shu;//对了,用longlong的话空间会炸掉的哦(longlong是8个字节,比int多一倍)
struct hehe
{
int as,bs,qz;
}sz[5005];//sz[i]表示i的情况(比如天敌有几个,食物有几个,强制末尾是他的食物链有几个)
queue<int>q;
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
sz[a].bs++;//bs是食物数
sz[b].as++;//as是天敌数
bj[a][b]=1;//bj[i][j]=1表示i会吃掉j
}
for(int i=1;i<=n;i++)//查找食物链的开始节点
{
if(sz[i].as==0)//找到啦
{
sz[i].qz=1;
q.push(i);
}
}
while(q.empty()!=true)//只要还有一个节点,while就休想退出!
{
shu=q.front();
for(int i=1;i<=n;i++)
{
if(bj[shu][i]==1)//研究表明:第shu号动物会吃掉第i号动物
{
sz[i].as--;//把他的天敌-1(就是还需要收集多少个节点的路径数)
sz[i].qz+=sz[shu].qz;//qz是路径总数的意思。
sz[i].qz%=80112002;//题目告诉我们要取模(这里不取会40分,别问我怎么知道的)
if(sz[i].as==0)//符合要求,要不是结尾,要不是下一个。
{
if(sz[i].bs==0)//他是结尾
{
zshu+=sz[i].qz;//zshu是食物链的总数
zshu%=80112002;//正常操作,取模
continue;//他都结尾了加他干嘛?
}
q.push(i);//他不是结尾,加进去继续搜
}
}
}
q.pop();//删除第一个,也就是现在这个
}
cout<<zshu<<endl;//输出
return 0;
}

这个题就很健康的讲完了,感觉还行。(感觉拓扑排序不难的样子,希望是这样)

P4017 最大食物链计数(洛谷)的更多相关文章

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

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

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

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

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

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

  4. 洛谷 P4017 最大食物链计数 题解

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

  5. 洛谷 P4017 最大食物链计数 (拓扑排序,思维)

    题意:有\(n\)个点,连\(m\)条边,求最多有多少条食物链(从头走到为有多少条路径). 题解:之前抽了点时间把拓扑排序补完了,这题其实就是一道拓扑排序的裸题.关于拓扑排序: ​ 1.首先,我们用\ ...

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

    拓扑排序板子题 #include <iostream> #include <cstdio> #include <cstring> #include <queu ...

  7. 【luogu P4017 最大食物链计数】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4017 DAG + DP #include <queue> #include <cstdio ...

  8. P4017 最大食物链计数 (拓扑排序)

    看到拓扑排序感觉非常遥远的复杂,不喜欢图.看了拓扑排序的原理,很像广搜. 以本题样例为例: 了解一下 出度 和 入度 5的出度为3 入度为 0 ,3的出度为2  入度为2…… for循环 找到秃头 5 ...

  9. 洛谷P2024 食物链

    挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...

随机推荐

  1. JS新界面关闭原界面刷新的多种形式

    ------------恢复内容开始------------ 1.新界面为当前界面弹出的形式: 第一步:首先原界面的原生JS事件需要放到 (function () {  ......  })(); 中 ...

  2. Docker拉取镜像加速

    关于Docker拉取镜像加速 打开桌面 docker 小图标 选中框框 根据下图 添加国内的加速源即可 Docker加速源 #网易 http://hub-mirror.c.163.com #Docke ...

  3. VScode Doxygen与Todo Tree插件的使用与安装

    VScode Doxygen与Todo Tree插件的使用与安装 引言 程序中代码注释的规范和统一性是作为工程人员必不可少的技能,本文在Visual Studio Code的环境下简单介绍Doxyge ...

  4. .NET Core请求控制器Action方法正确匹配,但为何404?

    前言 有些时候我们会发现方法名称都正确匹配,但就是找不到对应请求接口,所以本文我们来深入了解下何时会出现接口请求404的情况. 匹配控制器Action方法(404) 首先我们创建一个web api应用 ...

  5. Python方法函数记录

    目录 python 控制台输出的内容保存到txt 文件 eval函数使用 python 控制台输出的内容保存到txt 文件 import sys class Logger(object): def _ ...

  6. 【Model Log】模型评估指标可视化,自动画Loss、Accuracy曲线图工具,无需人工参与!

    1. Model Log 介绍 Model Log 是一款基于 Python3 的轻量级机器学习(Machine Learning).深度学习(Deep Learning)模型训练评估指标可视化工具, ...

  7. python字典套字典

    定义字典 familyinfo = { "family name":"Python", "family structure":[ {&quo ...

  8. linux查看当前目录下,各文件夹大小

    du -lh --max-depth=1

  9. Nginx配置upstream并且实现负载均衡

    感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结. 技术无止境, 我们仍需努力! 1,话不多说, ...

  10. 2020 最新省市区 sql

    一个基于有赞的 area.js 生成的sql area.js 简单的写了一个js 生成了sql语句 sql文件 完整代码