poj 3249(bfs+dp或者记忆化搜索)
题目链接: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或者记忆化搜索)的更多相关文章
- 二进制数(dp,记忆化搜索)
二进制数(dp,记忆化搜索) 给定k个<=1e6的正整数x(k不大于10),问最小的,能被x整除且只由01组成的数. 首先,dp很好写.用\(f[i][j]\)表示i位01串,模ki的值是j的数 ...
- poj1179 区间dp(记忆化搜索写法)有巨坑!
http://poj.org/problem?id=1179 Description Polygon is a game for one player that starts on a polygon ...
- poj 1661 Help Jimmy(记忆化搜索)
题目链接:http://poj.org/problem?id=1661 一道还可以的记忆化搜索题,主要是要想到如何设dp,记忆化搜索是避免递归过程中的重复求值,所以要得到dp必须知道如何递归 由于这是 ...
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 【bzoj1415】【聪聪和可可】期望dp(记忆化搜索)+最短路
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=57148470 Descrition 首先很明显是 ...
- POJ 3252 Round Numbers(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...
- noip2017D1T3逛公园(拓扑图上dp,记忆化搜索)
QWQ前几天才刚刚把这个D1T3写完 看着题解理解了很久,果然我还是太菜了QAQ 题目大意就是 给你一个n个点,m条边的图,保证1能到达n,求从1到n的 (设1到n的最短路长度是d)路径长度在[d,d ...
- poj 1085 Triangle War 博弈论+记忆化搜索
思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: #include<ios ...
- poj 1088 动态规划+dfs(记忆化搜索)
滑雪 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Description Mi ...
随机推荐
- SpringMVC响应Restful风格请求404
在学习Springmvc时,使用Restful风格的url,页面提示404错误.为找到原因,编写一个简单的Restful测试用例如下: jsp页面: <a href="user/tes ...
- 小程序show-confirm-bar完成按钮不能隐藏
<textarea>show-confirm-bar="false"></textarea> 不生效怎么办>? 改成 show-confir ...
- vue 不能检测数组长度 值变化原因解析
1.vue不能检测数组长度或者值的变化 (1)数组长度变化 未检测到 <!DOCTYPE html> <html lang="en"> <head&g ...
- [Spring MVC - 2A] - java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw ex ...
- Hibernate 入门示例
版权声明:本文为博主原创文章,如需转载请标注转载地址 博客地址:http://www.cnblogs.com/caoyc/p/5593406.html 环境: myelipse2015+Hibern ...
- struts2异常处理
<global-results> <result name="nullException">/WEB-INF/exception/nullException ...
- c# webbrowser 清除cookie和缓存
由于缓存文件是特殊的文件,以及WebBrowser与IE版本有关因此删除缓存绝对不可能用一些IO函数就总可以解决的因此我的这些函数在IO操作的基础上,又针对环境进行相应的清理. static clas ...
- Linux-进程、进程组、作业、会话、控制终端详解
一.进程 传统上,Unix操作系统下运行的应用程序. 服务器以及其他程序都被称为进程,而Linux也继承了来自unix进程的概念.必须要理解下,程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 ...
- Sublime Text 3 JS 格式化插件 JsFormat的配置使用
1.首先需要下载安装包:(下载地址:https://github.com/jdc0589/JsFormat) 2.插件包放到sublime安装目录的Data\Packages目录中 3.快捷键 Ctr ...
- MongoDB Database Profiler
数据库profiler细粒度收集mongodb的写操作.游标.数据库命令等.可以在数据库级别或者实例级别开启profiling. profiler将收集到的数据写入system.profile集合中. ...