• BZOJ 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
     1 /**************************************************************
     2     Problem: 4562
     3     User: Hammer_cwz_77
     4     Language: C++
     5     Result: Accepted
     6     Time:1164 ms
     7     Memory:7116 kb
     8 ****************************************************************/
     9  
    10 #include<bits/stdc++.h>
    11 using namespace std;
    12 const int gg=200000+5;
    13 struct node{
    14     int to;
    15     int net;
    16 }a[gg];
    17 int ans;
    18 int head[gg];
    19 int n,m;
    20 int r[gg],c[gg];
    21 int f[gg];
    22 int cnt;
    23 inline void add(int x,int y)
    24 {
    25     a[++cnt].to=y;
    26     a[cnt].net=head[x];
    27     head[x]=cnt;
    28 }
    29 inline void dfs(int x,int y)
    30 {
    31     if(f[x])
    32         return ;
    33     if(!c[x])
    34     {
    35         f[x]=1;
    36         return ;
    37     }
    38     for(int i=head[x];i;i=a[i].net)
    39     {
    40         if(a[i].to!=y)
    41         {
    42             dfs(a[i].to,x);
    43             f[x]+=f[a[i].to];
    44         }
    45     }
    46 }
    47 int main()
    48 {
    49     cin>>n>>m;
    50     for(int i=1;i<=m;i++)
    51     {
    52         int a,b;
    53         cin>>a>>b;
    54         r[b]++;
    55         c[a]++;
    56         add(a,b);
    57     }
    58     for(int i=1;i<=n;i++)
    59     {
    60         if(!r[i]&&c[i])
    61         dfs(i,i),
    62         ans+=f[i];
    63     }
    64     cout<<ans<<endl;
    65     return 0;
    66 }
  • 相关阅读:
    python-获取网页源码及保存网页图片到本地实例
    python-随机向文件中写入100个名字实例
    python-计算文件中每个字出现的次数
    python-序列类型
    python-字符串
    python示例1(基本知识巩固)
    python-示例(基本知识巩固)
    [leetcode] Binary Tree Upside Down
    Trie 树
    第K大问题
  • 原文地址:https://www.cnblogs.com/Hammer-cwz-77/p/8511303.html
Copyright © 2020-2023  润新知