图上DP POJ3249
2015-08-29 20:12
267 查看
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int val[100100]; int head[100100]; int dp[100100]; int num; bool in[100010]; bool en[100010]; struct edge { int fro,to,next; }e[10000100]; void addEdge(int _fro,int _to) { num++; e[num].fro=_fro; e[num].to=_to; e[num].next=head[_fro]; head[_fro]=num; } int dfs(int x) { if(dp[x]!=0) return dp[x]; dp[x]=-(1<<29); for(int i=head[x];i!=-1;i=e[i].next) { int v=e[i].to; dfs(v); dp[x]=max(dp[x],dp[v]+val[x]); } return dp[x]; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { num=0; memset(head,-1,sizeof(head)); for(int i=0;i<=n;i++) { in[i]=true; en[i]=true; } for(int i=1;i<=n;i++) scanf("%d",&val[i]); int a,b; for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); en[b]=false; in[a]=false; addEdge(b,a); } int ans=-(1<<29); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { if(en[i]) dp[i]=val[i]; } for(int i=1;i<=n;i++) { if(in[i]) { ans=max(ans,dfs(i)); } } cout<<ans<<endl; } return 0; }
View Code
相关文章推荐
- iOS开发:代码通用性以及其规范 第二篇(猜想iOS中实现TableView内部设计思路(附代码),以类似的思想实现一个通用的进度条)
- 基于boost.asio的ECHO服务器
- 磁盘挂载与卸载
- 面试题26.复杂链表的复制
- jquery模拟下拉框单选框复选Select,Checkbox,Radio
- LeetCode:Summary Ranges
- List<File>
- 希望自己可以更好
- UVa 12097 - Pie(二分查找)
- 回车和换行在windows和linux下的区别
- 在linux中添加ftp用户,并设置相应的权限
- Android 入门(2)
- DEV-C++官方下载地址
- http://www.zhihu.com/question/22821783/answer/22759545
- 欢迎使用CSDN-markdown编辑器
- 关于STM32中NVIC的理解,带错误例子
- Java中的装箱与拆箱
- SQL Server 2008管理工具出现 远程过程调用失败0x800706be解决方法
- 界面间传值
- C++11 并发(一道笔试题目)