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

//         求一条从入度为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. Android自己定义View基础篇(三)之SwitchButton开关

    自己定义View基础篇(二) 自己定义View基础篇(一) 自己定义View原理 我在解说之前,先来看看效果图,有图有真相:(转换gif图片效果太差) 那来看看真实图片: 假设你要更改样式,请改动例如 ...

  2. Android自己主动升级框架

    先看效果 使用 package com.ydl.versionupdate; import android.app.Activity; import android.content.Context; ...

  3. Effective C++ 条款三 尽可能使用const

    参考资料:http://blog.csdn.net/bizhu12/article/details/6672723      const的常用用法小结 1.用于定义常量变量,这样这个变量在后面就不可以 ...

  4. 《Deep Learning》全书已完稿_附全书电子版

    Deep Learning第一篇书籍最终问世了.站点链接: http://www.deeplearningbook.org/ Bengio大神的<Deep Learning>全书电子版在百 ...

  5. [原创] 在线音乐API的研究 (Part 2.1)

    最近,在优化一个自己写的音乐播放器.主要目的是回顾.归纳,并希望能够写出一个属于自己的common lib.今天,主要是关于在线音乐API的一些分析结果.此次,主要分析的是歌词.专辑部分.在线搜索音乐 ...

  6. Windows下也能够使用osw追朔系统历史性能

    1.Windows系统历史性能分析困难背景 在Linux/Unix上.要追朔历史性能,一般採用部署nmon进行性能监控採集与存储的方式实现.可是却没有在Windows上的版本号. Windows系统假 ...

  7. 使用Swift作为Glance后端存储

    原文链接 http://thornelabs.net/2014/08/03/use-openstack-swift-as-a-backend-store-for-glance.html By defa ...

  8. 给大二学生——能够再坚持一年的ACM

    [来信] 我是大二学生,就读于一所非常普通的大学.学校ACM基本零起步,去年才開始搞,我大一大二花了非常多时间搞acm,如今不太想放弃.但学校基本没人愿意搞这个. 非常快就要大三了,我一直在纠结要不要 ...

  9. 常用的sql命令

    1 mysql创建数据库 create database [database name]; 2 创建表 create table [table name]([first column name] [f ...

  10. js Date.parse()兼容性问题

    最近在做一个日历控件,网上copy了一段代码然后自己又改改. 标准浏览器下正常,结果ie全部不支持,搞不懂,原来Date.parse在IE下有兼容性问题 //beginData格式为'yyyy-mm- ...