我们需要拓扑一下。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<queue>
  6. #define maxv 100500
  7. #define maxe 200500
  8. using namespace std;
  9. int n,m,x,y,g[maxv],nume=,d[maxv],size[maxv],ans=;
  10. queue <int> q;
  11. bool flag[maxv];
  12. struct pnt
  13. {
  14. int id,rank;
  15. }p[maxv];
  16. struct edge
  17. {
  18. int v,nxt;
  19. }e[maxe];
  20. bool cmp(pnt x,pnt y){return x.rank<y.rank;}
  21. void addedge(int u,int v)
  22. {
  23. e[++nume].v=v;
  24. e[nume].nxt=g[u];
  25. g[u]=nume;
  26. }
  27. void topusort()
  28. {
  29. for (int i=;i<=n;i++)
  30. {
  31. if (!d[i])
  32. {
  33. p[i].rank=;
  34. q.push(i);
  35. }
  36. }
  37. while (!q.empty())
  38. {
  39. int head=q.front();q.pop();
  40. for (int i=g[head];i;i=e[i].nxt)
  41. {
  42. int v=e[i].v;
  43. if (!--d[v])
  44. {
  45. p[v].rank=p[head].rank+;
  46. q.push(v);
  47. }
  48. }
  49. }
  50. }
  51. int main()
  52. {
  53. scanf("%d%d",&n,&m);
  54. for (int i=;i<=m;i++)
  55. {
  56. scanf("%d%d",&x,&y);
  57. addedge(x,y);d[y]++;
  58. }
  59. for (int i=;i<=n;i++) p[i].id=i;
  60. topusort();
  61. sort(p+,p+n+,cmp);
  62. for (int i=n;i>=;i--)
  63. {
  64. int x=p[i].id;
  65. for (int j=g[x];j;j=e[j].nxt)
  66. {
  67. int v=e[j].v;
  68. flag[x]=true;size[x]+=size[v];
  69. }
  70. if (!flag[x]) size[x]=;
  71. }
  72. for (int i=;i<=n;i++)
  73. {
  74. if ((p[i].rank==) && (flag[p[i].id])) ans+=size[p[i].id];
  75. else if (p[i].rank!=) break;
  76. }
  77. printf("%d\n",ans);
  78. return ;
  79. }

BZOJ 4562 食物链的更多相关文章

  1. bzoj 4562 [Haoi2016]食物链

    4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MB Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 ...

  2. 洛谷 P3183 BZOJ 4562 [HAOI2016]食物链

    题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...

  3. BZOJ 4562: [Haoi2016]食物链(拓扑排序)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=4562 一句话题意:给一个DAG,求有多少条不完全相同的链,使链首入度为0,链尾出度为0. ...

  4. BZOJ 4562: [Haoi2016]食物链 拓扑排序

    建反图,跑一个拓扑排序dp即可. Code: #include <bits/stdc++.h> #define ll long long #define N 100005 #define ...

  5. BZOJ 4562 搜索...

    思路: 统计入度&出度 每搜到一个点 in[v[i]]--,f[v[i]]+=f[t]; if(!in[v[i]])if(out[v[i]])q.push(v[i]);else ans+=f[ ...

  6. 8.6培训 D1

    今天是赵和旭老师讲课(也是 zhx) 动态规划 利用最优化原理把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解(有点像分治?) 更具体的,假设我们可以计算出小问题的最优解,那么我们凭 ...

  7. 【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)

    4562: [Haoi2016]食物链 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 133  Solved: 112[Submit][Status] ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 【poj 1182】食物链(图论--带权并查集)

    题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...

随机推荐

  1. 5个开发人员不应该错过的最好跨平台PHP编辑器

    IDE(集成开发环境)或换句话说PHP编辑器是开发人员在构建移动或Web应用必不可少的工具.在这篇文章中,我们将讨论有关PHP编辑器并分享5个最好的跨平台的PHP编辑器. 1. NetBeans Ne ...

  2. php 正则匹配中文

    在javascript中,要判断字符串是中文是很简单的.比如:var str = "php编程";if (/^[\u4e00-\u9fa5]+$/.test(str)) {aler ...

  3. ARM流水线关键技术分析与代码优化

    引 言    流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一.ARM7处理器核使用了典型三级流 水线的冯·诺伊曼结构,AR ...

  4. 数据库索引<二> 如何创建索引

    前面一篇说法了索引结构,和几种索引在数据表上的结构,了解了索引可以为查询服务,这篇说一说如何创建索引. >平时可能的创建方式 这个系统中要用到A字段,B字段,C字段做为查询的条件,联接的条件较多 ...

  5. linux tar 增量备份命令

    tar --newer-mtime "2013-09-17 00:00:00"   -zcvf /var/www/good.tar.gz    spider/

  6. MySQL 建库、建用户及建表事项

    1,MySQL建库语句比较简单,一句话: create database tppamltest3 2,创建用户及授权: insert into mysql.user(Host,User,Passwor ...

  7. mke2fs/mks.etc3/fstab/mount指令

    一.mke2fs指令mkfs.etc3 /dev/sdb1指令 主要新学习 cat /etc/filesystem  //查看文件类型 mkfs. tab键有提示    //按照系统默认的值格式化 m ...

  8. java 面向对象编程--第十章 接口

    1.  接口可以看做是抽象类的特例.抽象类中可以定义抽象方法,也可以定义具体方法.但接口只能定义抽象方法.所有接口可以看作行为的抽象.定义接口使用关键字interface,实现接口使用关键字imple ...

  9. js控制html元素的readonly属性

    html元素假设为只读,那么其readonly="readonly",我们现在想通过js来改变readonly属性为可以输入. 初始时,两个输入框都是只读.点击change按钮后, ...

  10. Js笔试题之返回只包含数字类型的数组

    如js123ldka78sdasfgr653 => [123,78,653] 一般做法 分析: 1.循环字符串每个字符,是数字的挑出来拼接在一起,不是数字的,就给他空的拼个逗号 2.将新字符串每 ...