思路:我们首先来一遍拓扑排序,将点按先后顺序排列于一维数组中,然后扫描一遍数组,将每个点的出边所连接的点进行更新,即可得到最优解。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define inf 2000000010
#define Maxn 100010
#define Maxm 1000010
using namespace std;
int dist[Maxn],vi[Maxn],index[Maxn],e,value[Maxn],indegree[Maxn],outdegree[Maxn],ans[Maxn],num,n;
struct Edge{
int to,next,val;
}edge[Maxm];
void addedge(int from ,int to ,int val )
{
edge[e].to=to;
edge[e].val=val;
edge[e].next=index[from];
index[from]=e++;
}
int Max=-inf;
void Topsort()
{
queue<int> q;
int i,j,k,now,adj;
for(i=;i<=n;i++)
{
if(indegree[i]==)
{
q.push(i);
dist[i]=value[i];
}
}
while(!q.empty())
{
now=q.front();
ans[num++]=now;
q.pop();
for(i=index[now];i!=-;i=edge[i].next)
{
adj=edge[i].to;
indegree[adj]--;
if(!indegree[adj])
q.push(adj);
}
}
for(i=;i<num;i++)
{
//cout<<ans[i]<<" ";
for(j=index[ans[i]];j!=-;j=edge[j].next)
{
dist[edge[j].to]=max(dist[edge[j].to],dist[ans[i]]+edge[j].val);
}
if(outdegree[ans[i]]==)
{
if(dist[ans[i]]>Max)
Max=dist[ans[i]];
}
}
//cout<<endl;
}
void init()
{
memset(indegree,,sizeof(indegree));
memset(outdegree,,sizeof(outdegree));
memset(index,-,sizeof(index));
memset(vi,,sizeof(vi));
memset(ans,,sizeof(ans));
for(int i=;i<=;i++)
dist[i]=-inf;
Max=-inf;
e=;
num=;
}
int main()
{
int m,i,j,a,b,val;
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
for(i=;i<=n;i++)
scanf("%d",&value[i]);
for(i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
addedge(a,b,value[b]);
indegree[b]++,outdegree[a]++;
}
Topsort();
//for(i=1;i<=n;i++)
//cout<<dist[i]<<endl;
printf("%d\n",Max);
}
return ;
}

poj 3249 拓扑排序 and 动态规划的更多相关文章

  1. POJ 3249 拓扑排序+DP

    貌似是道水题.TLE了几次.把所有的输入输出改成scanf 和 printf ,有吧队列改成了数组模拟.然后就AC 了.2333333.... Description: MR.DOG 在找工作的过程中 ...

  2. 【BZOJ3832】[POI2014]Rally(拓扑排序,动态规划)

    [BZOJ3832][POI2014]Rally(拓扑排序,动态规划) 题面 BZOJ,权限题 洛谷 题解 这题好强啊,感觉学了好多东西似的. 首先发现了一个图画的很好的博客,戳这里 然后我来补充一下 ...

  3. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

  4. poj 2585 拓扑排序

    这题主要在于建图.对9个2*2的小块,第i块如果出现了不等于i的数字,那么一定是在i之后被brought的.可以从i到该数字建一条边. 图建好后,进行一次拓扑排序,判段是否存在环.若存在环,那么就是B ...

  5. Sorting It All Out POJ - 1094 拓扑排序

    题意:给N个字母,和M个偏序关系 求一个可确定的全序,可确定是指没有其他的可能例如A>B D>B 那么有ADB DAB两种,这就是不可确定的其中,M个偏序关系可以看做是一个一个按时间给出的 ...

  6. 洛谷P3953 逛公园(NOIP2017)(最短/长路,拓扑排序,动态规划)

    洛谷题目传送门 又是一年联赛季.NOIP2017至此收官了. 这个其实是比较套路的图论DP了,但是细节有点恶心. 先求出\(1\)到所有点的最短路\(d1\),和所有点到\(n\)的最短路\(dn\) ...

  7. nyoj 349 (poj 1094) (拓扑排序)

    Sorting It All Out 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 An ascending sorted sequence of distinct ...

  8. Poj(3687),拓扑排序,

    题目链接:http://poj.org/problem?id=3687 题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号 ...

  9. POJ 1094 拓扑排序

    Description:      规定对于一个只有大写字母的字符串是有大小顺序的.如ABCD.即A<B.B<C.C<D.那么问题来了.现在第一行给你n, m代表序列里只会出现前n的 ...

随机推荐

  1. JavaIO(01)File类详解

    File类 file类中的主要方法和变量   常量: 表示路径的分割符:(windows) 作用:根据java可移植性的特点,编写路径一定要符合本地操作系统要求的分割符: public static ...

  2. memcached全面剖析–2. 理解memcached的内存存储

    Slab Allocation机制:整理内存以便重复使用 最近的memcached默认情况下采用了名为Slab Allocator的机制分配.管理内存. 在该机制出现以前,内存的分配是通过对所有记录简 ...

  3. HDU 5768 Lucky7 (中国剩余定理+容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 给你n个同余方程组,然后给你l,r,问你l,r中有多少数%7=0且%ai != bi. 比较明显 ...

  4. type=INNODB和engine=INNODB的区别

    我在网站下载了一份源码,学习中, 发现type=INNODB,这个数据库引擎老实出错,,后来才一查资料才是: 在MYSQL5.5及以后版本中type=InnoDB 由ENGINE=InnoDB 代替. ...

  5. 【JDBC】百万数据插入

    使用JDBC连接数据库时,如果插入的数据量大,一条一条地插入数据会变得非常缓慢.此时,我们需要用到预处理. 查阅Java开发文档,我们可以看到: 接口 PreparedStatement 表示预编译的 ...

  6. sql:[dbo].[smt_MES_RptProductDaily] 生产日报表

    USE [ChangHongMES_904]GO/****** Object: StoredProcedure [dbo].[smt_MES_RptProductDaily] Script Date: ...

  7. Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式升级 PSU(自动模式)

    升级环境: 1.源库版本: Grid Infrastructure:11.2.0.3.13 Database:11.2.0.3.13 2.目标库版本: Grid Infrastructure:11.2 ...

  8. 几道 SQL 语句面试题

    --S (sno,sname)学生关系,sno为学号 sname为姓名 --C(cno,cname,Cteacher)课程关系 cno为课程号,cname为课程名,cteacher 为任课教师 --S ...

  9. C#关于静态与非静态的区别

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

  10. linux虚拟主机wdcp系列教程之四

    当我们安装了网站服务管理系统wdcp之后,在使用过程中可能会出现这样或那样的疑问,下面给大家整理几点出来,方便大家学习. 1.wdcp支持的在线解压 有时小文件数据量,但整个目录上传会比较慢,如果打包 ...