JZOJ 5660. 【HNOI2018D2T3】道路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyizhixl/article/details/79956788

Description

Description

Input

Input

Output

Output

Sample Input/Output

Sample Input/Output
Sample Input/Output
Sample Input/Output
Sample Input/Output

Data Constraint

Data Constraint

Hint

Hint
Hint

Solution

  • 这是 HNOI2018 最简单的一题了,但考场上还是没有想出来。

  • 这题状态设得比较巧妙,令 f[x][i][j] 表示从 x 到根的路径上还有 i 条公路、j 条铁路的最优答案。

  • 那么对于叶子结点,就有:

    f[x][i][j]=cx(ax+i)(bx+j)

  • 再对于城市,可以有转移如下:(即选择公路或铁路其一)

    f[x][i][j]=min(f[s[x]][i+1][j]+f[t[x]][i][j],f[s[x]][i][j]+f[t[x]][i][j+1])

  • 答案即为 f[1][0][0]

  • 如果空间有点问题,就回收一下空间吧。

  • 因为儿子节点的 f 转移到父亲后就没用了,可以重复利用该点位置的 f 数组。

Code

#include<cstdio>
#include<cctype>
using namespace std;
const int N=20005,M=42;
int n,tot;
int s[N],t[N],a[N],b[N],c[N];
int back[N<<1],num[N<<1];
long long f[83][M][M];
inline int read()
{
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) w|=ch=='-',ch=getchar();
    while(isdigit(ch)) X=(X<<1)+(X<<3)+(ch^48),ch=getchar();
    return w?-X:X;
}
inline long long min(long long x,long long y)
{
    return x<y?x:y;
}
void dfs(int x,int d1,int d2)
{
    int v=num[x]=back[0]?back[back[0]--]:++tot;
    if(x>=n)
    {
        int cnt=x-n+1;
        for(int i=0;i<=d1;i++)
            for(int j=0;j<=d2;j++)
                f[v][i][j]=(long long)c[cnt]*(a[cnt]+i)*(b[cnt]+j);
        return;
    }
    dfs(s[x],d1+1,d2);
    dfs(t[x],d1,d2+1);
    int ls=num[s[x]],rs=num[t[x]];
    for(int i=0;i<=d1;i++)
        for(int j=0;j<=d2;j++)
            f[v][i][j]=min(f[ls][i+1][j]+f[rs][i][j],f[ls][i][j]+f[rs][i][j+1]);
    back[++back[0]]=num[s[x]];
    back[++back[0]]=num[t[x]];
}
int main()
{
    freopen("road.in","r",stdin);
    freopen("road.out","w",stdout);
    n=read();
    for(int i=1;i<n;i++)
    {
        s[i]=read(),t[i]=read();
        if(s[i]<0) s[i]=-s[i]+n-1;
        if(t[i]<0) t[i]=-t[i]+n-1;
    }
    for(int i=1;i<=n;i++) a[i]=read(),b[i]=read(),c[i]=read();
    dfs(1,0,0);
    printf("%lld\n",f[num[1]][0][0]);
}
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页