poj 3249
来源:互联网 发布:浙江大学软件学院硕士 编辑:程序博客网 时间:2024/06/14 07:03
题目:传送
题意:
给定一个有向无环图,每个结点有权值,从入度为零的点作为起点,出度为零的点作为终点,要求出到终点时可能的最大权值(有可能是负的)
思路:
记录各点入读,然后,枚举这些点搜索初的最大值。
最大值用dp。
另外,受他软件影响人生第一个vector村邻接表写成了!!纪念Congratulation!!!
数组要开对啊!!另外还有一种拓扑+dp也许回头会写??
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector> #define inf -0x3fffffffusing namespace std;int n,m;vector<int> edge[100001];int v[100001],dp[100001],deg[100001];int dfs(int v0){ if(dp[v0]!=inf) //初度为0; return dp[v0]; int len=edge[v0].size(); if(len == 0) return v[v0]; int maxx=inf; for(int i=0;i<len;i++) { int temp=edge[v0][i]; maxx=max(maxx,dfs(temp)); } return dp[v0]=v[v0]+maxx;}int main(){ int a,b; while(scanf("%d%d",&n,&m) !=EOF) { for(int i=0;i<=100001;i++) { dp[i]=inf; edge[i].clear(); } memset(deg,0,sizeof(deg)); memset(v,0,sizeof(v)); for(int i=1;i<=n;i++){ scanf("%d",&v[i]); } for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); edge[a].push_back(b); deg[b]++; } int maxd=inf; for(int i=1;i<=n;i++) { if(deg[i] ==0 ){ maxd=max(maxd,dfs(i)); } } printf("%d\n",maxd); }}
拖走睡觉。
世界晚安。
1 0
- POJ 3249
- poj 3249
- poj 3249
- poj 3249 dp
- POJ 3249 (DAG)
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- HTML DOM 方法
- ubuntu下安装Eclipse
- 3.1.2 Memcached的特征
- python爬取动态生成的网页——以百度手机助手为例
- 下拉框默认加载
- poj 3249
- 3.1.3 Memcached的安装(1)
- 一起来瞧虚拟化——vtpm实战
- Java学习之Iterator(迭代器)的一般用法
- Intel Edison上使用jasoncpp
- 80x86指令/二进制码对照表
- 数据结构--链队列基本操作
- JS实现图片懒加载
- uboot下用SecureCRT脚本实现一键烧写linux