当前位置: 首页 > news >正文

[HAOI2016]食物链

OJ题号:BZOJ4562、洛谷3183

思路:记忆化搜索。

本体可以转化成“求有向图中入度为0的结点到出度为0的结点的路径数”。

每次加边时记录每个结点的入度和出度,然后从入度为0的结点开始搜索,搜到出度为0的结点。

搜索到越底层,重复的路径越多,所以就要用记忆化的思想,将每个结点出发的路径个数记录下来,第二次搜到时直接调用。

 1 #include<cstdio>
 2 #include<vector>
 3 const int N=100001;
 4 std::vector<int> e[N];
 5 int in_degree[N]={0};
 6 void add_edge(const int a,const int b) {
 7     e[a].push_back(b);
 8     in_degree[b]++;
 9 }
10 bool isroot(const int x) {
11     return !in_degree[x];
12 }
13 bool isleaf(const int x) {
14     return !e[x].size();
15 }
16 int f[N]={0};
17 int dfs(const int x) {
18     if(f[x]) return f[x];
19     if(isleaf(x)) return f[x]=1;
20     int ans=0;
21     for(int i=0;i<(int)e[x].size();i++) {
22         ans+=dfs(e[x][i]);
23     }
24     return f[x]=ans;
25 }
26 int main() {
27     int n,m;
28     scanf("%d%d",&n,&m);
29     for(int i=1;i<=m;i++) {
30         int a,b;
31         scanf("%d%d",&a,&b);
32         add_edge(a,b);
33     }
34     int ans=0;
35     for(int i=1;i<=n;i++) {
36         if(isroot(i)&&!isleaf(i)) ans+=dfs(i);
37     }
38     printf("%d\n",ans);
39     return 0;
40 }

 

转载于:https://www.cnblogs.com/skylee03/p/6930464.html

相关文章:

  • 事物分析的维度
  • 调查微软恶意升级 Windows 10 请愿即将达成
  • DB-Engines 4 月份全球数据库排名,MySQL 跌幅最大
  • Cmd Markdown 发布第十四次更新 --- 使命的召唤
  • npm 宣布协作工具 Orgs 免费,可不限量管理公有包
  • 类orAPI - 收藏集 - 掘金
  • 关于W8.1不能安装VS2015(包括2017等)
  • 前端性能优化之优化图片 优化显示图片
  • Java中的重写
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • TeamCity 2017.1.2 发布,持续集成工具
  • 微软:请叫我 Android 预装服务提供商
  • arcgis engine 获取高亮Feature、element
  • Java -- JDBC 学习--PreparedStatement
  • Vijos P1303 导弹拦截【最长上升子序列+DP】
  • C++11: atomic 头文件
  • CSS 提示工具(Tooltip)
  • EventListener原理
  • Hibernate【inverse和cascade属性】知识要点
  • HTTP--网络协议分层,http历史(二)
  • JAVA SE 6 GC调优笔记
  • javascript数组去重/查找/插入/删除
  • PHP的Ev教程三(Periodic watcher)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • spring-boot List转Page
  • Unix命令
  • 爱情 北京女病人
  • 高度不固定时垂直居中
  • 精彩代码 vue.js
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端面试总结(at, md)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何解决微信端直接跳WAP端
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 怎样选择前端框架
  • ​用户画像从0到100的构建思路
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转载)OpenStack Hacker养成指南
  • *p++,*(p++),*++p,(*p)++区别?
  • .gitignore文件—git忽略文件
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET中GET与SET的用法
  • .net中的Queue和Stack
  • [ 蓝桥杯Web真题 ]-布局切换
  • [ACM] hdu 1201 18岁生日
  • [Android] Implementation vs API dependency
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [BROADCASTING]tensor的扩散机制
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体