zoukankan      html  css  js  c++  java
  • Eating Everything Efficiently(反向dp)

    传送门

    取最大值即可。用拓扑,dfs都可以实现

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=500009;
    int n,m;
    struct p{
    	int to,nxt;
    }d[maxn];int head[maxn],cnt=1;
    void add(int u,int v){
    	d[cnt].nxt=head[u],d[cnt].to=v,head[u]=cnt++;
    }
    double ans=0,dp[maxn],val[maxn];
    void dfs(int now)
    {
    	if(dp[now])	return;
    	dp[now]=0;
    	for(int i=head[now];i;i=d[i].nxt)
    	{
    		int v=d[i].to;
    		dfs(v);
    		dp[now]=max(dp[now],dp[v]);
    	}
    	dp[now]=max(val[now]+dp[now]/2.0,dp[now]);
    	ans=max(ans,dp[now]);
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)	cin>>val[i];
    	for(int i=1;i<=m;i++)
    	{
    		int l,r;
    		cin>>l>>r;l++,r++;
    		add(l,r);
    	}
    	dfs(1);
    	printf("%.6lf",ans);
    }
    
  • 相关阅读:
    「2019纪中集训Day20」解题报告
    PHP基础入门
    javascript
    正则表达式
    DOM 节点
    对象
    字符串
    函数
    for循环
    jQuery
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12712060.html
Copyright © 2011-2022 走看看