• dwarf tower



    【问题描述】
    Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,
    它们的编号为1到n。现在Vasya想得到编号为1的物品。
    获得一个物品有两种方式:
    1. 直接购买该物品,第i件物品花费的钱为ci
    2. 用两件其他物品合成所需的物品,一共有m种合成方式。
    请帮助Vasya用最少的钱获得编号为1的物品。
    【输入格式】
    第一行有两个整数n,m(1<=n<=10000,0<=m<=100000),分别表示有n种物品以
    及m种合成方式。
    接下来一行有n个整数,第i个整数ci表示第i个物品的购买价格,其中
    0<=ci<=10^9。
    接下来m行,每行3个整数ai,xi,yi,表示用物品xi和yi可以合成物品ai,其
    中(1<=ai,xi,yi<=n; ai<>xi, xi<>yi, yi<>ai)
    【输出格式】
    一行,一个整数表示获取物品 1 的最少花费。
    输入样例: 
    5 3
    5 0 1 2 5
    5 2 3
    4 2 3
    1 4 5

    输出样例:
    2
    【数据规模与约定】
    60%的数据,n<=100
    100%的数据,n<=10000,m<=100000

    /*
      运用了一个类似于spfa的宽搜 
      对于输入的数据建边,形成一张图,然后宽搜前先将所有元素入队以备更新其他元素,
      如果其他元素被更新且未在队中就入队再次更新其他元素。 
    */
    #include<cstdio>
    #include<iostream>
    #include<queue>
    #define N 10010
    using namespace std;
    int head[N],val[N],vis[N],n,m;
    struct node
    {
        int pre,v,c;
    };node e[N*20];
    void add(int i,int v,int x,int y)
    {
        e[i].v=v;
        e[i].c=y;
        e[i].pre=head[x];
        head[x]=i;
    }
    void BFS()
    {
        queue<int> q;
        for(int i=1;i<=n;i++)q.push(i);
        while(!q.empty())
        {
            int x=q.front();q.pop();vis[x]=0;
            for(int i=head[x];i;i=e[i].pre)
              if(val[x]+val[e[i].c]<val[e[i].v])
              {
                  val[e[i].v]=val[x]+val[e[i].c];
                  if(!vis[e[i].v])
                  {
                      q.push(e[i].v);vis[e[i].v]=1;
                }
              }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
          scanf("%d",&val[i]);
        for(int i=1;i<=m;i++)
        {
            int v,x,y;scanf("%d%d%d",&v,&x,&y);
            add(i*2-1,v,x,y);add(i*2,v,y,x);
        }
        BFS();
        printf("%d",val[1]);
        return 0;
    }
  • 相关阅读:
    Pupet自动化管理环境部署记录
    Puppet常识梳理
    手动编写的几个简单的puppet管理配置
    Centos下部署DRBD+NFS+Keepalived高可用环境记录
    DRBD详细解说及配置过程记录
    kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
    kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
    kvm虚拟化管理平台WebVirtMgr部署-完整记录(0)
    zabbix监控-基本原理介绍
    OpenStack构架知识梳理
  • 原文地址:https://www.cnblogs.com/harden/p/6051804.html
Copyright © 2020-2023  润新知