码迷,mamicode.com
首页 > 其他好文 > 详细

红字差评系列2.dwarf

时间:2016-11-10 19:09:28      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:cout   pos   ring   blog   sea   std   ted   display   class   

技术分享

【题目分析】

  首先按照题目给出的样例想到只要每个物品的价格都用能够合成他的两个物品来更新,一边读入一边更新就好了,后来又发现如果出现这样的情况:1 2 3在2 5 6 的前面,那我们就需要先更新2在更新1.对吧就这样我就用了dfs然后完美爆栈75分,当然在这之前我还考虑到了如果一个物品可以被多个物品更新的话,那我们就是用边表记录下来,找每一组,但并没有实现(边表的孩子也是75hh),南城甚至建了棵树。但AC的同学是这么做(作)的,读入的时候更新一遍,读完了再倒回来更新一遍....为什么!!!(数据水)

技术分享
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define ll long long
const int maxn=20010;
int n,m;
ll c[maxn];
int a[maxn],x[maxn],y[maxn];
int pos;
int f[maxn][5];
ll ans;
ll search(int aa,int xx,int yy)
{
    if(xx==0&&yy==0)
        return c[aa];
    return min(c[aa],search(xx,f[xx][1],f[xx][2])+search(yy,f[yy][1],f[yy][2]));
}
int main()
{
    freopen("dwarf.in","r",stdin);
    freopen("dwarf.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&c[i]);
    for(int i=1;i<=m;i++)
    {
        int a,x,y;
        scanf("%d%d%d",&a,&x,&y);
        f[a][1]=x;f[a][2]=y;
    }
    cout<<search(1,f[1][1],f[1][2]);
    fclose(stdin);fclose(stdout);
    return 0;
}
没有AC

 

红字差评系列2.dwarf

标签:cout   pos   ring   blog   sea   std   ted   display   class   

原文地址:http://www.cnblogs.com/xiaoningmeng/p/6051756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!