//题意:   给出一个有向无环图,每个顶点都有一个权值。

//         求一条从入度为0的顶点到出度为0的顶点的一条路径,

//         路径上所有顶点权值和最大。

//我觉得只要明白

//图论里的链式前向星   的  建图原理  和  拓扑排序的一点知识就完全有能力打出来

//以后还是可以练练手的  所以写一发吧



//拓扑排序+优化一下

//author keyboarder

//time   2016/4/23 21:52

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <algorithm>

#include <queue>

#include <math.h>

#include <queue>

#include <stack>

using namespace std;

#define INF 0x3f3f3f

#define pi acos(-1.0)

#define LL long long

#define mm 1000000007

#define N 1000010

struct asd{

    int to;

    int next;

};

asd q[N];

int head[N],tol;

int pre[N];

int out[N];

int val[N];

int dp[N];

int n,m;

void add(int a,int b)

{

    q[tol].to=b;

    q[tol].next=head[a];

    head[a]=tol++;

}

void tuopu()

{

    queue<int>e;

    while(!e.empty())

        e.pop();

    for(int i=1;i<=n;i++)

    {

        if(pre[i]==0)

        {

            pre[i]=-1;

            e.push(i);

        }

    }

    while(!e.empty())

    {

        int u=e.front();

        e.pop();

        for(int v=head[u];v!=-1;v=q[v].next)

        {

            int i=q[v].to;

            dp[i]=max(dp[u]+val[i],dp[i]);

            pre[i]--;

            if(pre[i]==0)

            {

                pre[i]=-1;

                e.push(i);

            }

        }

    }

}

int main()

{

    while(~scanf("%d%d",&n,&m))

    {

        for(int i=1;i<=n;i++)

        {

            scanf("%d",&val[i]);

        }

        int u,v;

        tol=0;

        memset(head,-1,sizeof(head));

        memset(pre,0,sizeof(pre));

        memset(out,0,sizeof(out));

        for(int i=0;i<m;i++)

        {

            scanf("%d%d",&u,&v);

            add(u,v);

            pre[v]++;

            out[u]++;

        }

        for(int i=1;i<=n;i++)

        {

            if(pre[i]==0)

            {

                dp[i]=val[i];

            }

            else

                dp[i]=-INF;

        }

        tuopu();

        int ans=-INF;

        for(int i=1;i<=n;i++)

        {

            if(out[i]==0)

                ans=max(ans,dp[i]);

        }

        printf("%d\n",ans);

    }

    return 0;

}


poj3249【拓扑排序】的更多相关文章

  1. poj3249 拓扑排序+DP

    题意:给出一个有向无环图,每个顶点都有一个权值.求一条从入度为0的顶点到出度为0的顶点的一条路径,路径上所有顶点权值和最大. 思路:因为是无环图,则对于每个点经过的路径求其最大权值有,dp[i]=ma ...

  2. POJ3249 Test for Job(拓扑排序+dp)

    Test for Job Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10137   Accepted: 2348 Des ...

  3. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  4. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  5. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  6. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  7. 图——拓扑排序(uva10305)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  8. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  9. poj 3687(拓扑排序)

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

随机推荐

  1. javaweb 中的过滤器 包装器

    过滤器要做的事情: 请求过滤器:完毕安全检查,又一次格式化请求首部或体.建立请求审计或日志 响应过滤器:     压缩响应流,追加或改动响应流创建一个全然不同的响应. 过滤器和servlet三个相似地 ...

  2. CMS - tabBar

    Tips:如果网页图片(文字)看不清,请按CTRL+鼠标滚轮 1.建议使用阿里图库 或者 easyicon 2.建议使用81*81且低于40KB的图片(建议jpg) 3.如需查看脑图结构,请点击:ta ...

  3. 使用虚拟机VM运行Linux版OpenERP

    Table of Contents 下载.安装vmware player --免费 从百度云下载 镜像文件 建立vm 运行vm 访问openerp 更新代码至最新         下载.安装vmwar ...

  4. 手机号码归属地查询免费api接口代码

    依据手机号码查询用户的卡类型.运营商.归属地.区域等信息. 手机归属地实体类 package org.wx.xhelper.model; /** * 手机归属地 * @author wangxw * ...

  5. viewcontroller生命周期知识要点

    一 viewcontroller执行方法的主要顺序为: init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—> ...

  6. 全国省市区三级联动js

    function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; ...

  7. MySQL远程访问时非常慢的解决方案

    服务器放在局域网内进行测试时,数据库的访问速度还是很快.但当服务器放到外网后,数据库的访问速度就变得非常慢. 后来在网上发现解决方法,my.cnf里面添加 [mysqld] skip-name-res ...

  8. return和exit

    return从当前函数返回而exit结束正在运行的程序 示例: [wangml@iZwz976helaylvgqok97prZ testForC]$ ./exit.test q [wangml@iZw ...

  9. webpack的安装个配置

    webpack在node下运行,首先先安装node 安装在全局:npm install webpack -g 在任何目录都可以运行 安装在局部:npm init -y npm install webp ...

  10. netty5源代码探索(一)----ByteBuf初探

    Netty的各种简单介绍,总体架构就不介绍了,假设大家感觉的确须要,给我留言我再追加. 这里再推广一个自己做得netty+spring的集成方案,优化netty配置启动,并提供基础server搭建的配 ...