题意:给出一个有向无环图,每个顶点都有一个权值。求一条从入度为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;
}

最新文章

  1. JDK,JRE,JVM,三者的区别于联系?
  2. MD5加密的Java实现
  3. 安装cocoods
  4. 通过反射获取SSM的controller层的注解以及注解中的value值
  5. Apache POI使用详解
  6. javaScript内置类Date,Math等
  7. 题目连接:http://acm.zznu.edu.cn/problem.php?id=1329
  8. 【转】Delphi多线程学习(9):多线程数据库查询(ADO)
  9. 深入浅出ES6(一):ES6是什么
  10. 关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记
  11. codevs1166 矩阵取数游戏
  12. 03-Foundation中NSMutableArray遍历、复制和排序
  13. Java I/O最简单的几个类
  14. 【阿里聚安全&#183;安全周刊】Python库现后门 可窃取用户SSH信息|Facebook再曝300万用户数据泄露
  15. kafka 幂等生产者及事务(kafka0.11之后版本新特性)
  16. [转]Raw Queries in Laravel
  17. day037 mysql之单表查询
  18. Git初次使用总结,安装到上传代码,多平台[码云|github]
  19. [Android]_[0基础]_[adb 有用命令]
  20. Vue Admin 后台管理

热门文章

  1. java中string.trim()函数的使用
  2. Eclipse创建Maven项目报错的解决
  3. 在windows平台下electron-builder实现前端程序的打包与自动更新
  4. 第7章 DNS &amp; bind从基础到深入
  5. .Net大局观(2).NET Core 2.0 特性介绍和使用指南
  6. 用netstat查看网络状态详解
  7. 从FMDB到WCDB、微信团队怎么说?
  8. 采用SmartQQ 协议可制作聊天机器人
  9. axios.js
  10. eclipse自动提示设置以及问题:去除变量自动提示(图文详解)