zoukankan      html  css  js  c++  java
  • 图上DP POJ3249

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 
     5 using namespace std;
     6 
     7 int val[100100];
     8 int head[100100];
     9 int dp[100100];
    10 int num;
    11 bool in[100010];
    12 bool en[100010];
    13 
    14 struct edge
    15 {
    16     int fro,to,next;
    17 }e[10000100];
    18 
    19 void addEdge(int _fro,int _to)
    20 {
    21     num++;
    22     e[num].fro=_fro;
    23     e[num].to=_to;
    24     e[num].next=head[_fro];
    25     head[_fro]=num;
    26 }
    27 
    28 int dfs(int x)
    29 {
    30     if(dp[x]!=0)
    31         return dp[x];
    32     dp[x]=-(1<<29);
    33     for(int i=head[x];i!=-1;i=e[i].next)
    34     {
    35         int v=e[i].to;
    36         dfs(v);
    37         dp[x]=max(dp[x],dp[v]+val[x]);
    38     }
    39     return dp[x];
    40 }
    41 
    42 int main()
    43 {
    44     int n,m;
    45     while(scanf("%d%d",&n,&m)!=EOF)
    46     {
    47         num=0;
    48         memset(head,-1,sizeof(head));
    49         for(int i=0;i<=n;i++)
    50         {
    51             in[i]=true;
    52             en[i]=true;
    53         }
    54         for(int i=1;i<=n;i++)
    55             scanf("%d",&val[i]);
    56         int a,b;
    57         for(int i=1;i<=m;i++)
    58         {
    59             scanf("%d%d",&a,&b);
    60             en[b]=false;
    61             in[a]=false;
    62             addEdge(b,a);
    63         }
    64         int ans=-(1<<29);
    65         memset(dp,0,sizeof(dp));
    66         for(int i=1;i<=n;i++)
    67         {
    68             if(en[i])
    69                 dp[i]=val[i];
    70         }
    71         for(int i=1;i<=n;i++)
    72         {
    73             if(in[i])
    74             {
    75                 ans=max(ans,dfs(i));
    76             }
    77         }
    78         cout<<ans<<endl;
    79     }
    80     return 0;
    81 }
    View Code
  • 相关阅读:
    Lua 学习之基础篇一<Lua 运算符>
    Git: invalid active developer path
    Lua中使用continue 小练习
    Xcode 运行objc_msgSend 提示objc_msgsend()Too many arguments to function call, expected 0
    逆向思维
    机场
    旅行者
    好图计数
    支配树
    一般图最大匹配
  • 原文地址:https://www.cnblogs.com/wsruning/p/4769702.html
Copyright © 2011-2022 走看看