老师开始帮我们查漏补缺啦!
我们的老师这两天给了我们一些我们没怎么学的函数和算法,比如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. php 判断设备是手机还是平板还是pc

    1 <?php 2 //获取USER AGENT 3 $agent = strtolower($_SERVER['HTTP_USER_AGENT']); 4 5 //分析数据 6 $is_pc ...

  2. vulstack红队评估(五)

    一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: Win7: heart 123.com    #本地管理员用户 sun\Administrator dc123.com    #域管用户,改 ...

  3. CVE-2017-7269-iis远程溢出漏洞复现

    ##01漏洞描述 cve_2017_7269漏洞属于高危漏洞,是由Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院)发现的.IIS 6.0开启Webdav服 ...

  4. 记一次mysql小版本升级

    最近护网操作比较紧,基线和漏洞检查比较频繁,新扫描出来的mysql漏洞需要修复,没有啥好的修复方法,只剩下升级版本这一条路,生产环境是5.7.12,二进制文件直接解压使用的,看了一下现在最新的版本,5 ...

  5. Asp.Net 五大对象及作用

    Connection(连接对象):与数据源建立连接. DataAdapter(适配器对象):对数据源执行操作并返回结果,在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet中,或根 ...

  6. C#实现模拟鼠标点击事件(点击桌面的其他程序 )

    注释感觉已经很清楚了,有不懂的欢迎评论 1 using System; using System.Collections.Generic; using System.ComponentModel; u ...

  7. 【解读】TCP协议

    本文内容如下:      1)TCP协议概念      2)TCP头部结构和字段介绍      3)TCP流量控制            滑动窗口      4)TCP拥塞控制           慢 ...

  8. IDEA2019版中文汉化包

    废话不多说,上才艺   E G M~~~~~ 2020版的IDEA大佬可以无视........ 1.打开IDEA文件目录 2.打开lib目录--将汉化版复制到该目录下 3.打开IDEA查看效果 高铁链 ...

  9. eclipse使用git提交代码

    准备工作: 目的:eclipse使用git提交本地项目,提交至远程github上 eclipse版本:eclipse4.5  64位 jdk版本:jdk-1.7 64位 项目类型:maven web项 ...

  10. vue全家桶(3.1)

    4.数据请求 4.1.axios是什么? axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有以下特征: 从浏览器中创建 XMLHttpRequest 从 no ...