Dwarf Tower

题目连接:

http://codeforces.com/gym/100269/attachments

Description

Little Vasya is playing a new game named “Dwarf Tower”. In this game there are n different items,

which you can put on your dwarf character. Items are numbered from 1 to n. Vasya wants to get the

item with number 1.

There are two ways to obtain an item:

• You can buy an item. The i-th item costs ci money.

• You can craft an item. This game supports only m types of crafting. To craft an item, you give

two particular different items and get another one as a result.

Help Vasya to spend the least amount of money to get the item number 1.

Input

The first line of input contains two integers n and m (1 ≤ n ≤ 10 000; 0 ≤ m ≤ 100 000) — the number

of different items and the number of crafting types.

The second line contains n integers ci — values of the items (0 ≤ ci ≤ 109

).

The following m lines describe crafting types, each line contains three distinct integers ai

, xi

, yi — ai

is

the item that can be crafted from items xi and yi (1 ≤ ai

, xi

, yi ≤ n; ai ̸= xi

; xi ̸= yi

; yi ̸= ai).

Output

The output should contain a single integer — the least amount of money to spend.

Sample Input

5 3

5 0 1 2 5

5 2 3

4 2 3

1 4 5

Sample Output

2

Hint

题意

有n个物品,每个物品的价格是pi,现在你有m种交换方式,就是ai+bi可以换得一个ci

然后问你最便宜得到第一个物品的价钱是多少

题解:

跑最短路,m就相当于建了m条边。

一开始把所有点都压进队列然后跑spfa就好了

至于中途怎么买过来买过去的我不知道,反正暴力出来就是答案咯

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4+5;
int d[maxn];
struct edge{
int x,y;
edge() {}
edge(int X,int Y):x(X),y(Y){}
};
vector<edge>E[maxn];
int inq[maxn];
int main()
{
freopen("dwarf.in","r",stdin);
freopen("dwarf.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&d[i]);
for(int i=1;i<=m;i++)
{
int x,y,z;scanf("%d%d%d",&x,&y,&z);
E[y].push_back(edge(z,x));
E[z].push_back(edge(y,x));
}
queue<int> Q;
for(int i=1;i<=n;i++)
Q.push(i),inq[i]=1;
while(!Q.empty())
{
int now = Q.front();
Q.pop();
inq[now]=0;
for(int i=0;i<E[now].size();i++)
{
int v = E[now][i].x;
int u = E[now][i].y;
if(d[v]+d[now]<d[u])
{
d[u]=d[now]+d[v];
if(!inq[u])
inq[u]=1,Q.push(u);
}
}
}
cout<<d[1]<<endl;
}

Codeforces Gym 100269D Dwarf Tower spfa的更多相关文章

  1. Codeforces Gym 100269 Dwarf Tower (最短路)

    题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a new game na ...

  2. Problem D. Dwarf Tower spfa

    http://codeforces.com/gym/100269/attachments 首先建图,然后图中每条边的权值是会变化的,是由dis[x] + dis[y]  --->   dis[m ...

  3. Codeforces Gym 100269A Arrangement of Contest 水题

    Problem A. Arrangement of Contest 题目连接: http://codeforces.com/gym/100269/attachments Description Lit ...

  4. noip模拟赛 dwarf tower

    [问题描述]Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,它们的编号为1到n.现在Vasya想得到编号为1的物品.获得一个物品有两种方式:1. ...

  5. dwarf tower

    dwarf tower(dwarf.cpp/c/pas)[问题描述]Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,它们的编号为1到n.现在Va ...

  6. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  7. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  8. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  9. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

随机推荐

  1. 基于Android的简单聊天工具-服务器端

    1.数据库用的mysql,一共有3张表,一张用户表user.一张朋友列表friend和一张消息表message. 1 User table 用户表 uid 主键自动生成 userName 昵称 use ...

  2. python自动开发之第二十三天(Django)

    一.一大波model操作 1. 创建数据库表 # 单表 # app01_user ==> tb1 # users class User(models.Model): name = models. ...

  3. python基础===解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX(转载)

    本文转自:解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX 从网上抓了一些字 ...

  4. (十八)Linux开机启动管理---systemd使用

    常用命令 使某服务自动启动 systemctl enable httpd.service 使某服务不自动启动 systemctl disable httpd.service 检查服务状态 system ...

  5. sunos kernel src leakrs

    https://github.com/joede/libezV24 https://github.com/ysei/siriusSparcV8 https://github.com/omniti-la ...

  6. 81.Search in Rotated Sorted Array II---二分变形

    题目链接 题目大意:与33题类似,只是这里数组中有重复数值. 法一:解法与33题类似,只是这里要处理1,3,1,1,1这种情况,即有重复值时,mid与left和right都相等时,可以采用right- ...

  7. HDU 6183 Color it 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题意: 有四种操作: 0:清除所有点 1 x y c : 给点(x, y)添加一种颜色c(颜色不 ...

  8. ip和子网掩码的判断

     只要记住B类IP的范围就好了(128以下的是A,128~191是B段,192以上是C段) 比如B类,网络地址为前两段,后面两段是主机地址,所以网络标识应该是255.255.0.0

  9. POJ 1733 Parity game(带权并查集)

    题目链接:http://poj.org/problem?id=1733 题目大意:给你m条信息,每条信息告诉你区间l~r的1的个数是奇数还是偶数,如果后面出现信息跟前面矛盾则这条信息是错误的,问在第一 ...

  10. HDU-5273

    Dylans loves sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...