poj3249 拓扑排序+DP
题意:给出一个有向无环图,每个顶点都有一个权值。求一条从入度为0的顶点到出度为0的顶点的一条路径,路径上所有顶点权值和最大。
思路:因为是无环图,则对于每个点经过的路径求其最大权值有,dp[i]=max(dp[j]) j为i的子节点集合。再根据其要求入度为零为顶点,可以用拓扑排序每次枚举入度为零的点删去找下一个入度为零的点进行dp。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define MAXN 100005
#define MAXM 1000005
#define inf 100000000 int n,m,tot,ans;
int indegree[MAXN],outdegree[MAXN],vis[MAXN],dp[MAXN],head[MAXN],cost[MAXN]; struct Edge
{
int from,to,next;
}edge[MAXM];
void addedge(int v,int w)
{
edge[tot].from=v;
edge[tot].to=w;
edge[tot].next=head[v];
head[v]=tot++;
}
void Topo_dp()
{
int c=1;
while(c<n)
{
for(int i=1;i<=n;i++)
{
if(!indegree[i]&&!vis[i])
{
vis[i]=true;
c++;
for(int j=head[i];j!=-1;j=edge[j].next)
{
int v=edge[j].to;
indegree[v]--;
if(dp[i]+cost[v]>dp[v])
{
dp[v]=dp[i]+cost[v];
}
}
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&cost[i]);
}
for(int i=1;i<=n;i++)
{
indegree[i]=0;
outdegree[i]=0;
vis[i]=false;
}
tot=1;
memset(head,-1,sizeof(head));
for(int i=1;i<=m;i++)
{
int v,w;
scanf("%d%d",&v,&w);
addedge(v,w);
indegree[w]++;
outdegree[v]++;
}
ans=-inf;
for(int i=1;i<=n;i++)
{
if(!indegree[i])
{
dp[i]=cost[i];
}
else
{
dp[i]=-inf;
}
} Topo_dp();
for(int i=1;i<=n;i++)
{
if(!outdegree[i]&&dp[i]>ans)
ans=dp[i];
}
printf("%d\n",ans);
}
return 0;
}
poj3249 拓扑排序+DP的更多相关文章
- POJ 3249 拓扑排序+DP
貌似是道水题.TLE了几次.把所有的输入输出改成scanf 和 printf ,有吧队列改成了数组模拟.然后就AC 了.2333333.... Description: MR.DOG 在找工作的过程中 ...
- [NOIP2017]逛公园 最短路+拓扑排序+dp
题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...
- 洛谷P3244 落忆枫音 [HNOI2015] 拓扑排序+dp
正解:拓扑排序+dp 解题报告: 传送门 我好暴躁昂,,,怎么感觉HNOI每年总有那么几道题题面巨长啊,,,语文不好真是太心痛辣QAQ 所以还是要简述一下题意,,,就是说,本来是有一个DAG,然后后来 ...
- 【BZOJ-1194】潘多拉的盒子 拓扑排序 + DP
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 456 Solved: 215[Submit][Stat ...
- 【BZOJ5109】[CodePlus 2017]大吉大利,晚上吃鸡! 最短路+拓扑排序+DP
[BZOJ5109][CodePlus 2017]大吉大利,晚上吃鸡! Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏 ...
- bzoj1093[ZJOI2007]最大半连通子图(tarjan+拓扑排序+dp)
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- 【bzoj4011】[HNOI2015]落忆枫音 容斥原理+拓扑排序+dp
题目描述 给你一张 $n$ 个点 $m$ 条边的DAG,$1$ 号节点没有入边.再向这个DAG中加入边 $x\to y$ ,求形成的新图中以 $1$ 为根的外向树形图数目模 $10^9+7$ . 输入 ...
- 【bzoj1093】[ZJOI2007]最大半连通子图 Tarjan+拓扑排序+dp
题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:对于u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. ...
- 【bzoj4562】[Haoi2016]食物链 拓扑排序+dp
原文地址:http://www.cnblogs.com/GXZlegend/p/6832118.html 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动 ...
随机推荐
- 【有意思的BUG】需要停止的进程
用户操作的目的:将某网站的歌曲分享到朋友圈 用户遇到的问题:在朋友圈内,有2个入口可以播放该第三方的歌曲.但是这两个入口可以同时播放,音乐重叠了. 操作步骤: [1] 将歌曲分享到朋友圈 [2] 在朋 ...
- HDU 4662 MU Puzzle:找规律
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4662 题意: 初始字符串为"MI". 有三个操作: (1)将'M'之后的所有字符翻 ...
- vue.js初探:计算属性和methods
在vue.js中,计算属性和methods方法的函数相同时,两者的最终执行结果都是相同的.然而不同的是,计算属性是基于它的依赖缓存.计算属性只有在它的相关依赖发生改变时才会重新取值.这就意味着只要 m ...
- Qt词典搜索
Qt词典搜索 采用阿凡达数据-API数据接口及爱词霸API数据接口实现词典搜索功能,实例字符串搜索接口分别为:中文词组采用“词典”,中文单个字采用“中华字典”,英文或其他字符采用“爱词霸”: 对应的A ...
- C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)
C/C++ 知识点---sizeof使用规则及陷阱分析 原文出处:[胖奇的专栏] 1.什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gi ...
- 2017年最新15个漂亮的 HTML 摄影网站模板
摄影是一门艺术,它需要大量的耐心和努力工作来捕捉那些精彩的瞬间.如果你是一位热情的摄影师,想要建立一个网站来展示那些高质量的摄影作品,那么你找对地方了.本文包含15个最佳的摄影网站模板,你可以使用这些 ...
- iOS app 的 ASLR
这两天逆向一个程序,发现每次image list -o -f 之后,它的基地址都是0x00000,也就是偏移地址是0. 想到这个应该是载入内存时有没有启用偏移有关,于是找了下答案:aslr 百度百科 ...
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [1, 0, param1, param2]
Spring+mybatis错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.bi ...
- MySQL 网络访问连接
查看 /etc/hosts配置文件 [hotspot@bogon ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localh ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...