题目链接:http://poj.org/problem?id=3249

思路:dp[i]表示到点i的最大收益,初始化为-inf,然后从入度为0点开始bfs就可以了,一开始一直TLE,然后优化了好久才4000ms险过。

之后有写了个dfs记忆化搜索,果然快多了。

bfs AC code:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 100100
#define MAXM 2002000
#define inf 1<<30 struct Edge{
int v,next;
}edge[MAXM]; int n,m,NE;
int head[MAXN]; void Insert(int u,int v)
{
edge[NE].v=v;
edge[NE].next=head[u];
head[u]=NE++;
} int In_degree[MAXN],Out_degree[MAXN];
int dp[MAXN],value[MAXN];
bool mark[MAXN]; void bfs()
{
queue<int>que;
fill(dp,dp++n,-inf);
memset(mark,false,(n+)*sizeof(bool));
for(int i=;i<=n;i++)if(In_degree[i]==){
mark[i]=true;
dp[i]=value[i];
que.push(i);
}
while(!que.empty()){
int u=que.front();
que.pop();
mark[u]=false;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].v;
if(dp[u]+value[v]>dp[v]){
dp[v]=dp[u]+value[v];
if(!mark[v]){
mark[v]=true;que.push(v);
}
}
}
}
} int main()
{
int u,v,ans;
while(~scanf("%d%d",&n,&m)){
NE=;
memset(head,-,(n+)*sizeof(int));
memset(In_degree,,(n+)*sizeof(int));
memset(Out_degree,,(n+)*sizeof(int));
for(int i=;i<=n;i++)scanf("%d",&value[i]);
while(m--){
scanf("%d%d",&u,&v);
Insert(v,u);
In_degree[u]++;
Out_degree[v]++;
}
bfs();
ans=-inf;
for(int i=;i<=n;i++){
if(Out_degree[i]==)ans=max(ans,dp[i]);
}
printf("%d\n",ans);
}
return ;
}

dfs 记忆化 AC code:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 100100
#define MAXM 2002000
#define inf 1<<30 struct Edge{
int v,next;
}edge[MAXM]; int n,m,NE;
int head[MAXN]; void Insert(int u,int v)
{
edge[NE].v=v;
edge[NE].next=head[u];
head[u]=NE++;
} int In_degree[MAXN],Out_degree[MAXN];
int dp[MAXN],value[MAXN]; int dfs(int u)
{
if(dp[u]!=-inf)return dp[u];
dp[u]=value[u];
int ans=-inf;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].v;
ans=max(ans,dfs(v));
}
if(ans!=-inf){
dp[u]+=ans;
}
return dp[u];
} int main()
{
int u,v,ans;
while(~scanf("%d%d",&n,&m)){
NE=;
memset(head,-,(n+)*sizeof(int));
memset(In_degree,,(n+)*sizeof(int));
memset(Out_degree,,(n+)*sizeof(int));
for(int i=;i<=n;i++)scanf("%d",&value[i]);
while(m--){
scanf("%d%d",&u,&v);
Insert(u,v);
In_degree[v]++;
Out_degree[u]++;
}
ans=-inf;
fill(dp,dp++n,-inf);
for(int i=;i<=n;i++){
if(In_degree[i]==){
ans=max(ans,dfs(i));
}
}
printf("%d\n",ans);
}
return ;
}

poj 3249(bfs+dp或者记忆化搜索)的更多相关文章

  1. 二进制数(dp,记忆化搜索)

    二进制数(dp,记忆化搜索) 给定k个<=1e6的正整数x(k不大于10),问最小的,能被x整除且只由01组成的数. 首先,dp很好写.用\(f[i][j]\)表示i位01串,模ki的值是j的数 ...

  2. poj1179 区间dp(记忆化搜索写法)有巨坑!

    http://poj.org/problem?id=1179 Description Polygon is a game for one player that starts on a polygon ...

  3. poj 1661 Help Jimmy(记忆化搜索)

    题目链接:http://poj.org/problem?id=1661 一道还可以的记忆化搜索题,主要是要想到如何设dp,记忆化搜索是避免递归过程中的重复求值,所以要得到dp必须知道如何递归 由于这是 ...

  4. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  5. 【bzoj1415】【聪聪和可可】期望dp(记忆化搜索)+最短路

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=57148470 Descrition 首先很明显是 ...

  6. POJ 3252 Round Numbers(数位dp&amp;记忆化搜索)

    题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...

  7. noip2017D1T3逛公园(拓扑图上dp,记忆化搜索)

    QWQ前几天才刚刚把这个D1T3写完 看着题解理解了很久,果然我还是太菜了QAQ 题目大意就是 给你一个n个点,m条边的图,保证1能到达n,求从1到n的 (设1到n的最短路长度是d)路径长度在[d,d ...

  8. poj 1085 Triangle War 博弈论+记忆化搜索

    思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: #include<ios ...

  9. poj 1088 动态规划+dfs(记忆化搜索)

    滑雪 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u   Description Mi ...

随机推荐

  1. 解决svn Authorization failed错误

    解决svn Authorization failed错误 (2010-09-22 21:37:31) 转载▼   出现该问题基本都是三个配置文件的问题,下面把这个文件列出来 svnserve.conf ...

  2. recess----1.第一个APP-helloRecess

    选择recess的理由很简单,这个架构看起来很轻量级,很简单.至少是写起应用来感觉不需要考虑太多和架构相关的东西.没有按作者给的过程一步步来,折腾了好久...在这里记录一下. 安装过程略,官网文档无压 ...

  3. ionicframework(二)

    Start building with Ionic! Follow these quick steps and start building high quality mobile apps in m ...

  4. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

    目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...

  5. Android自己定义之流式布局

    流式布局,优点就是父类布局能够自己主动的推断子孩子是不是须要换行,什么时候须要换行,能够做到网页版的标签的效果. 今天就是简单的做了自己定义的流式布局. 详细效果: 原理: 事实上非常easy,Mea ...

  6. Windows 10 KMS 激活方法

    本篇文章由:http://xinpure.com/windows-10-activate-method/ 摘抄: http://www.nruan.com/win-key.html 须知:如果需要在线 ...

  7. vue TypeError: Cannot read property 'length' of undefined 问题解决思路

    上图中是我在接手一个项目的时候,出现的一个关于数组的 bug,但是从上图来看,其实报错是不清楚的,只能从报错信息上看出来是 /src/page/waybill/waybill_form.vue 这个 ...

  8. mysql导入慢

    MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时.在导出时合理使用几个参数,可以大大加快导 入的速度. -e 使用包括几个VALUES列表的多行INSE ...

  9. stm32中的数据类型定义

    STM32F10X.H #include "core_cm3.h" #include "system_stm32f10x.h" #include <std ...

  10. MySQL之mysql客户端工作的批处理一些使用手法

    通常我们会用mysql这个客户端程序来连接mysql库.这个通常是工作在交互式模式下的.如我们连接上mysql并执行如下操作: mysql -uroot -h127. -P3306 Welcome t ...