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

//         求一条从入度为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. MySQL和MongoDB的性能测试

    软硬件环境 MySQL版本:5.1.50,驱动版本:5.1.6(最新的5.1.13有很多杂七杂八的问题) MongoDB版本:1.6.2,驱动版本:2.1 操作系统:Windows XP SP3(这个 ...

  2. C#语言基础语句

    case,switch,break的使用 Console.WriteLine("1.汉堡"); Console.WriteLine("2.薯条"); Conso ...

  3. mysql 内置函数大全 mysql内置函数大全

    mysql 内置函数大全 2013年01月15日 19:02:03 阅读数:4698 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代 ...

  4. Network Booting

    http://en.wikipedia.org/wiki/Network_booting Network booting Network booting is the process of booti ...

  5. 面向接口的webservice发布方式

    import javax.jws.WebService; /**面向接口的webservice发布方式 */ @WebService public interface JobService { pub ...

  6. 自己定义msi安装包的运行过程

    有时候我们须要在程序中运行还有一个程序的安装.这就须要我们去自己定义msi安装包的运行过程. 比方我要做一个安装管理程序,能够依据用户的选择安装不同的子产品.当用户选择了三个产品时,假设分别显示这三个 ...

  7. 2016/05/27 php上传文件常见问题总结

    php上传文件常见问题总结 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-02-03我要评论 这篇文章主要介绍了php上传文件常见问题总结,基本上经常碰到的问题的处理都列了 ...

  8. JasperReport 中文问题解决

    1 运行环境    1.1 JasperReport 3.5    JasperReports 是iReport的核心内容.它是一个强有力的开源报表产生工具,可以将内容输出到屏幕上.打印机或生成PDF ...

  9. C语言文件读写Demo

    CIODemo.c #include <stdio.h> #include <time.h> #define INPUT_BUFFER_SIZE 100 * 1024 int ...

  10. map数据的分组,list数据排序 数据筛选

    sfit0144 (李四) 2015-01-10 18:00:251Sfit0734 (Sfit0734) 2015-01-10 18:00:38go homesfit0144 (李四) 2015-0 ...