JZOJ 5660. 【HNOI2018D2T3】道路

标签: 动态规划 树形DP 图论
14人阅读 评论(0) 收藏 举报
分类:

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]);
}
查看评论

Jzoj3486 道路改建

人称不死将军的林登·万,与他的兄弟林登·图两人的足迹踏遍了地球的每一寸土地。他们曾将战火燃遍了世界。即使是lifei888这样的强悍人物也从来没有将他彻底击败。 这一次,林登·万在N个城市做好了暴动...
  • JacaJava
  • JacaJava
  • 2017-12-03 20:32:02
  • 106

JZOJ 3808. 道路值守

Floyd
  • huangjingyuan107
  • huangjingyuan107
  • 2016-12-31 14:43:26
  • 339

JZOJ 3808 【NOIP2014模拟8.25】道路值守

道路值守Description有一个有NN个点,MM条边的图,问对于该图内的每一对点对(xx,yy)(xx≠yy),问xx,yy之间的所有的最短路径覆盖了多少条边。Data ConstraintNN...
  • XianHaoMing
  • XianHaoMing
  • 2017-01-16 16:51:11
  • 648

51nod1743 JZOJ4899【NOIP2016提高A组集训第17场11.16】雪之国度

Description雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路。雪之女王赋予了每一座城市不同的能量,...
  • crybymyself
  • crybymyself
  • 2016-11-16 22:28:54
  • 677

【JZOJ3806】小X 的道路修建

Description因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍。 很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条。...
  • sadnohappy
  • sadnohappy
  • 2017-01-09 19:26:45
  • 253

JZOJ 1751. Span

Description  某国有N个村子,M条道路,为了实现“村村通工程”现在要”油漆”N-1条道路(因为某些人总是说该国所有的项目全是从国外进口来的,只是漆上本国的油漆罢了),因为“和谐”是此国最大...
  • ypxrain
  • ypxrain
  • 2017-06-18 20:37:45
  • 290

JZOJ5415. 【NOIP2017提高A组集训10.22】公交运输 DP

题意不说了。有点鬼畜,比赛只会50分,花了30分钟思考一无所获,连按模分组都没想到迟早退役。 然后花了十分钟打50分扔了这题。巨亏。 其实比赛还剩一个小时的时候发现是斜率优化,但是没时间打所以就放...
  • qq_35866453
  • qq_35866453
  • 2017-10-23 21:39:29
  • 89

【JZOJ4899】【NOIP2016提高A组集训第17场11.16】雪之国度

题目描述雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路。雪之女王赋予了每一座城市不同的能量,其中第i座城市...
  • hiweibolu
  • hiweibolu
  • 2016-11-21 14:41:32
  • 216

【JZOJ 3886】 道路维护

Description最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象...
  • lyd_7_29
  • lyd_7_29
  • 2017-01-19 20:18:30
  • 203

【JZOJ 3808】 道路值守

DescriptionCrossbell 自治州有着四通八达的现代化交通。时值独立庆典之际,随着来自周边国家旅客的日益增 多,犯罪行为也悄无声息开始滋长起来。 特别任务支援科的警察们从总部收到了关...
  • lyd_7_29
  • lyd_7_29
  • 2016-12-31 13:14:17
  • 198
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 18万+
    积分: 4725
    排名: 7674
    博客专栏
    最新评论