HAOI 2016 食物链

[HAOI2016]食物链

时间限制:1 s   内存限制:128 MB

【题目描述】

如图所示为某生态系统的食物网示意图,据图回答第一小题。

1.数一数,在这个食物网中有几条食物链(   )

现在给你n个物种和m条能量流动关系,求其中的食物链条数。

物种的名称为从1到n编号,m条能量流动关系形如

a1 b1

a2 b2

a3 b3

……

am−1 bm−1

am bm

其中ai bi表示能量从物种ai流向物种bi。

【输入格式】

第一行两个正整数n和m。

接下来m行每行两个整数ai bi表示m条能量流动关系。

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

【输出格式】

一个整数即食物网中的食物链条数。

【样例输入】

10 16
1 2
1 4
1 10
2 3
2 5
4 3
4 5
4 8
6 8
7 6
7 9
8 5
9 8
10 6
10 7
10 9

【样例输出】

9

【样例解释】

就是上面题目描述1的那个图。

各个物种的编号依次为:

草<->1 兔<->2 狐<->3 鼠<->4 猫头鹰<->5 吃虫的鸟<->6 蜘蛛<->7 蛇<->8 青蛙<->9 食草昆虫<->10。

【数据范围】

1≤n≤100000,0≤m≤200000。

【来源】

HAOI2016上午第一题 部分题面由ck进行调整

记忆化搜索,注意单个生物不能算作食物链

#include<cstdio>

#define N 100004
int sum[N];
struct node{
    int v,next;
}edge[N*2];
int rd[N],cd[N],head[N];
int n,m;
int read(){
    int x=0,f=1;char c=getchar();
    while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c<=‘9‘&&c>=‘0‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}
int num;int ans;
void add_edge(int x,int y){
    edge[++num].v=y;edge[num].next=head[x];head[x]=num;
}
int frist[N],cnt;

int dfs(int x)
{
    if(cd[x]==0)
    {
        sum[x]++;
    }
    for(int i=head[x];i;i=edge[i].next)
    {
        if(sum[edge[i].v])sum[x]+=sum[edge[i].v];
        else sum[x]+=dfs(edge[i].v);
    }
    return sum[x];
}
int main()
{
    //freopen("chain_2016.in","r",stdin);
    //freopen("chain_2016.out","w",stdout);
    n=read();m=read();
    int a,b;
    for(int i=1;i<=m;i++)
    {
        a=read();b=read();
        add_edge(a,b);
        cd[a]++;
        rd[b]++;
    }
    for(int i=1;i<=n;i++)
    {
        if(rd[i]==0&&cd[i]!=0)
        {
            ans+=dfs(i);
        }
    }
    printf("%d",ans);
    return 0;
}
时间: 2024-09-28 15:12:46

HAOI 2016 食物链的相关文章

[HAOI 2016]找相同字符

Description 题库链接 给定两个只含小写字母字符串 \(s_1,s_2\) ,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. \(1\leq |s_1|,|s_2|\leq 200000\) Solution 把两个串拼在一起,然后扫两遍. 第一遍统计所有的 \(B\) ,在它前面的 \(A\) 的贡献:第二遍统计所有的 \(A\) ,在它前面的 \(B\) 的贡献: 用单调栈维护一下即可. Code #include <b

[bzoj 4566][Haoi 2016]找相同字符

传送门 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. Solution 考虑用SAM,采用较为轻松的姿势 首先中加个特殊符号,把连个字符串接在一起 SAM的每个节点都存下了一些子串,我们分别记下它在\(s_1\)和\(s_2\)中出现的次数 那么每个状态它给答案的贡献是 \[ (step[i]-step[fa[i]]) × siz_{s_1}[i]×siz_{s_2}[i] \] Code?

聊一聊前端模板与渲染那些事儿

欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码): https://segmentfault.com/blog/frontenddriver 作为现代应用,ajax的大量使用,使得前端工程师们日常的开发少不了拼装模板,渲染模板.我们今天就来聊聊,拼装与渲染模板的那些事儿. 如果喜欢本文请点击右侧的推荐哦,你的推荐会变为我继续更文的动力 1 页面级的渲染 在刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串

使用 Raspberry Pi 上的传感器在 Node.js 中创建一个 IoT Bluemix 应用程序

先决条件 一个IBM Bluemix 帐号,一个 Raspberry Pi 2 或 3,一个 PIR 运动传感器 适用于本文的 Github 存储库 如果您是一位精明的 Bluemix 开发人员,您可能只想看看如何在 node.js 中与 IoT 建立连接,或者只想了解如何从此 github 存储库中拉取我的代码. git clone https://github.com/nicolefinnie/iot-nodejs-tutorial 以下是实现与 IBM IoT 平台连接在一起的 4 个 R

2016暑假集训训练2 C题 食物链

带权并查集傻逼题 用拆点方法草过. 拆点代码: # include <stdio.h> # include <string.h> int set[150005], n, k, d; int find(int x) { int s, temp; for (s=x; set[s]>=0; s=set[s]) ; while (s != x) { temp = set[x]; set[x] = s; x = temp; } return s; } void union_set(in

NOI2001|POJ1182食物链[种类并查集 向量]

食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65430   Accepted: 19283 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同

Bug测试报告--食物链教学工具--奋斗吧兄弟

组名:奋斗吧兄弟 测试时间:2016-11-23 15:15 测试者:李权(nice!团队) 代码地址:HTTPS: https://git.coding.net/li_yuhuan/FoodChain.git SSH: [email protected]:li_yuhuan/FoodChain.git 组长博客地址:http://www.cnblogs.com/huangxman/p/6048474.html Bug1: 期待看到的:当在某已确定的生态系统添加生物时(比如田地生态系统),系统提

爱奇艺、优酷、腾讯视频竞品分析报告2016(一)

1 背景 1.1 行业背景 1.1.1 移动端网民规模过半,使用时长份额超PC端 2016年1月22日,中国互联网络信息中心 (CNNIC)发布第37次<中国互联网络发展状况统计报告>,报告显示,网民的上网设备正在向手机端集中,手机成为拉动网民规模增长的主要因素.截至2015年12月,我国手机网民规模达6.20亿,有90.1%的网民通过手机上网. 图 1  2013Q1~2015Q3在线视频移动端和PC端有效使用时长份额对比 根据艾瑞网民行为监测系统iUserTracker及mUserTrac

China Operating System 电脑操作系统 2016全球互联网排名

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 电脑操作系统 China Operating System 2016全球互联网排名 ========