魔法宝石(邻接表+dfs更新)
魔法宝石
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 254 Accepted Submission(s): 85
Problem Description
小s想要创造n种魔法宝石。小s可以用ai的魔力值创造一棵第i种魔法宝石,或是使用两个宝石合成另一种宝石(不消耗魔力值)。请你帮小s算出合成某种宝石的所需的最小花费。
Input
第一行为数据组数T(1≤T≤3)。
对于每组数据,首先一行为n,m(1≤n,m≤10^5)。分别表示魔法宝石种类数和合成魔法的数量。
之后一行n个数表示a1到an。(1≤ai≤10^9)。ai表示合成第i种宝石所需的魔力值。
之后m行,每行三个数a,b,c(1≤a,b,c≤n),表示一个第a种宝石和第b种宝石,可以合成一个第c种宝石。
Output
每组数据输出一行n个数,其中第i个数表示合成第i种宝石的魔力值最小花费。
Sample Input
1
3 1
1 1 10
1 2 3
Sample Output
1 1 2
题意
分析
由于一个宝石费用减少只会影响以它直接/间接为材料的宝石,故我们先根据宝石关系建邻接表,每次遇到有宝石费用减少,dfs处理一遍即可
题目不错,多复习
trick
似乎时间复杂度略高,数据较弱?
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
struct node
{
int x,y,z;
}data[100100];
vector<node>mp[100100];
int a[100100];
void dfs(int z)
{
node temp;
for(int j=0;j<mp[z].size();j++)//每次找与z直接关联的点更新
{
temp=mp[z][j];
if(a[temp.z]>a[temp.x]+a[temp.y])
{
a[temp.z]=a[temp.x]+a[temp.y];
dfs(temp.z);
}
}
}
int main()
{
int t;
for(scanf("%d",&t);t--;)
{
int n,m;
mem(mp,0);
mem(a,0);
mem(data,0);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int x,y,z;
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&x,&y,&z);
data[i]={x,y,z};
node temp;
temp.x=x,temp.y=y,temp.z=z;
mp[x].push_back(temp);//建双向边
temp.x=y,temp.y=x;
mp[y].push_back(temp);
}
for(int i=0;i<m;i++)
{
x=data[i].x,y=data[i].y,z=data[i].z;
if(a[z]>a[x]+a[y])
{
a[z]=a[x]+a[y];
dfs(z);
}
}
for(int i=1;i<=n;++i)printf("%d%c",a[i],i==n?'\n':' ');
}
return 0;
}
魔法宝石(邻接表+dfs更新)的更多相关文章
- 分道扬镳 /// 邻接表 DFS 剪枝 oj1332
题目大意: 编号为1…N 的N个城市之间以单向路连接,每一条道路有两个参数:路的长度和通过这条路需付的费用. Bob和Alice生活在城市1,但是当Bob发现了Alice玩扑克时欺骗他之后,他决定与她 ...
- zzuli 1907: 小火山的宝藏收益 邻接表+DFS
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 113 Solved: 24 SubmitStatusWeb Board Description ...
- HDU2586 How far away ? 邻接表+DFS
题目大意:n个房子,m次询问.接下来给出n-1行数据,每行数据有u,v,w三个数,代表u到v的距离为w(双向),值得注意的是所修建的道路不会经过一座房子超过一次.m次询问,每次询问给出u,v求u,v之 ...
- 数据结构作业——图的存储及遍历(邻接矩阵、邻接表+DFS递归、非递归+BFS)
邻接矩阵存图 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Las ...
- Head of a Gang (map+邻接表+DFS)
One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ...
- PAT1013. Battle Over Cities(邻接矩阵、邻接表分别dfs)
//采用不同的图存储结构结构邻接矩阵.邻接表分别dfs,我想我是寂寞了吧,应该试试并查集,看见可以用并查集的就用dfs,bfs代替......怕了并查集了 //邻接矩阵dfs #include< ...
- 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)
数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...
- 邻接表实现Dijkstra算法以及DFS与BFS算法
//============================================================================ // Name : ListDijkstr ...
- 图的全部实现(邻接矩阵 邻接表 BFS DFS 最小生成树 最短路径等)
1 /** 2 * C: Dijkstra算法获取最短路径(邻接矩阵) 3 * 6 */ 7 8 #include <stdio.h> 9 #include <stdlib.h> ...
随机推荐
- js跳出循环的方法区别( break, continue, return ) 及 $.each 的(return true 和 return false)
js编程语法之break语句: break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句. 由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的 ...
- Ubuntu搭建Android开发环境
前言 由于迁移到新的笔记本,所以Android开发环境须要又一次配置了.android官网有配置教程,我正好回想一遍 配置Java环境 下载jdk.官网地址:http://www.oracle.com ...
- android-auto-scroll-view-pager
https://github.com/eltld/android-auto-scroll-view-pager
- IE浏览器部分版本不支持background-size属性问题
background-size是CSS3新增的属性,但是IE8以下还是不支持,可以通过滤镜来实现这样的一个效果 background-size:contain; // 缩小图片来适应元素的尺寸(保持像 ...
- POJ 2892 Tunnel Warfare(树状数组+二分)
题目链接 二分求上界和下界,树状数组.注意特殊情况. #include <cstring> #include <cstdio> #include <string> ...
- poj3349(hash or violence)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 38600 Accep ...
- A toolbox to build your own build server
A toolbox to build your own build server LambdaCD - Build Pipelines as Code https://www.lambda.cd/ A ...
- Mongoose Embedded Web Server Library
https://github.com/cesanta/mongoose http://ltp.ai/docs/ltpserver.html LTP Server在轻量级服务器程序mongoose基础上 ...
- passive aggressive(pa)和average perceptron(ap)
passive aggressive(pa)和average perceptron(ap)
- sql索引原理以及优化
http://itindex.net/detail/52237-%E7%B4%A2%E5%BC%95-%E5%8E%9F%E7%90%86 http://itindex.net/detail/5171 ...