• P2515-[HAOI2010]软件安装


      1 #include <iostream>
      2 #include <vector>
      3 #define _for(i,a,b) for(register int i = (a);i < b;i ++)
      4 #define _rep(i,a,b) for(register int i = (a);i > b;i --)
      5 #define INF 0x3f3f3f3f
      6 #define MOD 100000000
      7 #define maxn 1503
      8 #define pb push_back
      9 #define debug() printf("Miku Check OK!
    ")
     10 typedef long long ll;
     11 
     12 using namespace std;
     13 typedef pair<int,int> P;
     14 inline ll read()
     15 {
     16     ll ans = 0;
     17     char ch = getchar(), last = ' ';
     18     while(!isdigit(ch)) last = ch, ch = getchar();
     19     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
     20     if(last == '-') ans = -ans;
     21     return ans;
     22 }
     23 inline void write(ll x)
     24 {
     25     if(x < 0) x = -x, putchar('-');
     26     if(x >= 10) write(x / 10);
     27     putchar(x % 10 + '0');
     28 }
     29 int N,M;
     30 int ver[maxn],Next[maxn],head[maxn],dfn[maxn],low[maxn];
     31 int Gver[maxn],GNext[maxn],Ghead[maxn],Gtot;
     32 int stack[maxn],ins[maxn],c[maxn];
     33 vector<int> scc[maxn];
     34 int tot,top,cnt,nm;
     35 int We[maxn],Ve[maxn],W[maxn],V[maxn];
     36 int iopW[maxn],iopV[maxn],iopD[maxn];
     37 int indeg[maxn];
     38 int dp[maxn][maxn];
     39 void addori(int x,int y)
     40 {
     41     ver[++tot] = y,Next[tot] = head[x],head[x] = tot;
     42 }
     43 void tarjan(int x)
     44 {
     45     dfn[x] = low[x] = ++nm;
     46     stack[++top] = x,ins[x] = 1;
     47     for(int i = head[x]; i; i = Next[i])
     48     {
     49         int y = ver[i];
     50         if(!dfn[y])
     51         {
     52             tarjan(y);
     53             low[x] = min(low[x],low[y]);
     54         }
     55         else if(ins[y])
     56             low[x] = min(low[x],dfn[y]);
     57     }
     58     if(dfn[x] == low[x])
     59     {
     60         cnt ++;
     61         int y;
     62         do
     63         {
     64             y = stack[top --],ins[y] = 0;
     65             c[y] = cnt,scc[cnt].pb(y);
     66         }
     67         while(x != y);
     68     }
     69 }
     70 void addAft(int x,int y)
     71 {
     72     Gver[++Gtot] = y;
     73     GNext[Gtot] = Ghead[x];
     74     Ghead[x] = Gtot;
     75 }
     76 void Shrink()
     77 {
     78     _for(i,1,N+1)
     79     if(!dfn[i])
     80         tarjan(i);
     81 
     82     _for(x,1,N+1)
     83     for(int i = head[x]; i; i = Next[i])
     84     {
     85         int y = ver[i];
     86         if(c[x]==c[y]) continue;
     87         addAft(c[y],c[x]);
     88         indeg[c[x]] ++;
     89     }
     90     _for(i,1,cnt+1)
     91     _for(j,0,scc[i].size())
     92     W[i] += We[scc[i][j]],V[i] += Ve[scc[i][j]];
     93 
     94     _for(i,1,cnt+1)
     95     if(!indeg[i])
     96         addAft(0,i);
     97 }
     98 void dfs(int u)
     99 {
    100     _for(i,W[u],M+1)
    101         dp[u][i] = V[u];
    102     for(int p = Ghead[u]; p; p = GNext[p])
    103     {
    104         int y = Gver[p];
    105         dfs(y);
    106         int k = M - W[u];
    107         _rep(i,k,-1)
    108             _for(j,0,i+1)
    109                 dp[u][i + W[u]] = max(dp[u][i + W[u]],
    110                                      dp[y][j] + dp[u][i + W[u] - j]);
    111     }
    112 }
    113 int main()
    114 {
    115     N = read();
    116     M = read();
    117     _for(i,1,N+1)
    118     iopW[i] = read();
    119     _for(i,1,N+1)
    120     iopV[i] = read();
    121     _for(i,1,N+1)
    122     iopD[i] = read();
    123 
    124     _for(i,1,N+1)
    125     {
    126         We[i] = iopW[i];
    127         Ve[i] = iopV[i];
    128         if(iopD[i])
    129             addori(i,iopD[i]);
    130     }
    131     Shrink();
    132     dfs(0);
    133     write(dp[0][M]);
    134     return 0;
    135 }
  • 相关阅读:
    Autofac-案例
    Autofac-DynamicProxy(AOP动态代理)
    AutoFac注册2-程序集
    MVC添加跨域支持Cros
    redis笔记3-基础知识与常用命令
    Redis笔记2-Redis安装、配置
    Redis笔记-八种数据类型使用场景
    ActionResult源码分析笔记
    .NET UrlRouting原理
    webapi使用ExceptionFilterAttribute过滤器
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11628343.html
Copyright © 2020-2023  润新知