https://vjudge.net/problem/FZU-2256

题意:略

思路:

在比赛的时候想到了一次dfs,一次bfs但是样例都过不了。。。赛后才知道,距离的更新必须同步,不能先把时光机的距离更新了,再去更新走路的距离。

这题实际上是树上的动态规划,但是可以用一次dfs解决。每次更新的距离的时候,有两个距离需要注意一下,第一个是通过时光机的距离,第二个是实际的距离。时光机的距离如何更新呢,通过上级的距离与(实际的距离加上当前的时光机的距离)进行比较更新。实际的距离的更新就是直接加上当前的实际距离加上走的距离传入下一级就ok了。注意一开始传入的时光机的距离设置为无穷大,因为没有其他时光机可以到达1号房间。

代码:

 #include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std; struct edge
{
int from,to,dist;
}; vector<edge> edges; vector<int> v[]; int d[];
int dis[]; void init(void)
{
edges.clear();
memset(v,,sizeof(v));
} void adde(int from,int to,int dist)
{
edge t;
t.from = from,t.to = to,t.dist = dist; edges.push_back(t); int sz = edges.size(); v[from].push_back(sz-);
} void dfs(int rt,int cst1,int cst2)//cst1是传送,cst2是走路
{
dis[rt] = min(cst1,cst2); for (int i = ;i < v[rt].size();i++)
{
int id = v[rt][i]; edge t = edges[id]; int x = t.to,w = t.dist; int cost = min(dis[rt] + d[rt],cst1); dfs(x,cost,dis[rt] + w);
}
} int main()
{
int n; while (scanf("%d",&n) != EOF)
{
init(); for (int i = ;i <= n;i++)
{
scanf("%d",&d[i]);
} for (int i = ;i < n;i++)
{
int id,dis; scanf("%d%d",&id,&dis); adde(id,i+,dis);
} dfs(,,); for (int i = ;i <= n;i++)
printf("%d ",dis[i]); printf("\n");
} return ;
}

FZU 2256 迷宫的更多相关文章

  1. FOJ Problem 2256 迷宫

                                                                                                        ...

  2. FZU 2285 迷宫寻宝

    思路: bfs求最短路径. #include<stdio.h> #include<iostream> #include<queue> #include<cst ...

  3. FZU 2186 小明的迷宫 【压状dp】

    Problem Description 小明误入迷宫,塞翁失马焉知非福,原来在迷宫中还藏着一些财宝,小明想获得所有的财宝并离开迷宫.因为小明还是学生,还有家庭作业要做,所以他想尽快获得所有财宝并离开迷 ...

  4. Problem 2285 迷宫寻宝 (BFS)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323    Submit: 1247Time Li ...

  5. Problem 2285 迷宫寻宝

    http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...

  6. C语言动态走迷宫

    曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...

  7. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  8. BFS_Maze_求解迷宫最短路径

    /* 10 10 #.######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .## ...

  9. FZU 2137 奇异字符串 后缀树组+RMQ

    题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...

随机推荐

  1. C#码农的大数据之路 - HDP SandBox配置及VS连接.md

    在进行HDInsight的开发测试之前,搭建一个测试环境是很重要的. 由于微软与Hortonworks合作开发了HDInsgiht,如果不方便建立Azure账号使用Azure HDInsight进行开 ...

  2. weex入门

    近期要做一个安卓端的原生应用程序.情况是这样的:需求方原先已经实现了网页,是一个工具类应用,大致作用是连接到他们公司生产的硬件,然后通手机与智能硬件通信来对硬件进行一系列控制.不过呢,这个网页先前是由 ...

  3. vue动画的用法

    vue动画 在vue.js中有两种写动画的方法,第一种就是像js里一样,用原生代码来实现,第二种则是使用animate.css的动画类文件,这个动画类和bootstrap.css文件类似,直接调用类就 ...

  4. Mac OS X 安装后的简单设置

    让Mac拥有类似apt-get的功能--安装Homebrew Homebrew是一个包管理器,用于在Mac上安装一些OS X没有的UNIX工具(比如著名的wget). 国内下载地址:http://ww ...

  5. [BZOJ4008]亚瑟王

    Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...

  6. cookie 与 session

    cookie简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据.一般情况下,Cookie通过HTTP headers从服务端返回到客户端.多数web程序都支持Co ...

  7. scrapy代理的设置

    scrapy代理的设置 在我的上一篇文章介绍了scrapy下载器中间件的使用,这里的scrapyIP的代理就是用这个原理实现的,重写了下载器中间件的process_request(self,reque ...

  8. 团体队列UVA540 Team Queue(队列简单用法)

    题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队. ...

  9. Ubuntu命令模式基础

    Ubuntu是一个自由.开源.基于Debian的Linux发行版.在ubuntu的基础上,又衍生其它各具特色的Linux发行版.首先是一个操作系统,操作系统用于管理电脑硬件.要发挥出电脑的作用,还得依 ...

  10. 小程序之发起请求 wx.request(object)的坑

    这是官方的API,然后官方的实例中 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { ...