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. WireShark网络分析就这么简单 读后感

    京东618活动,满200减100,果断入手了这本经典的 WireShark教程

  2. 在chrome下鼠标拖动层变文本形状的问题

    学JQ也有一段时间了,想自己写个鼠标拖动层移动的效果(很简单,只是为了练习而已)于是就写下了下面的代码 <!DOCTYPE html> <html> <head> ...

  3. WPF中使用USERCONTROL

    继续这两篇文章写: http://daniex.info/wpf-using-usercontrol.html http://www.codeproject.com/Articles/32825/Ho ...

  4. PHP的SQL注入技术实现以及预防措施

    SQL 攻击(SQL injection,台湾称作SQL资料隐码攻击),简称注入攻击,是发生于应用程序之数据库层的安全漏洞.简而言之,是在输入的字符串之中注入SQL指 令,在设计不良的程序当中忽略了检 ...

  5. cookie 与 session

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

  6. CoolBlog开发笔记第1课:项目分析

    首先说一下CoolBlog开发笔记是我制作的<Django实战项目>系列教程基础篇的内容,使用Django来开发一个酷炫的个人博客,涉及的知识包括项目的分析,环境的搭建,模型和视图定义等等 ...

  7. 架构漫谈系列(2) 封装(Encapsulation)

    这是这个系列的第二篇.在第二篇里,我决定讲一讲封装. 程序的不同部分应该用封装去互相隔离,模块之间应该不应该产生很随意的关联. 可能有的人觉得不解,又或觉得是有道理的废话,不急,先一步一步来. 我们先 ...

  8. 浅谈Cordova框架的一些理解

    前言 因为工作原因,最近需要研究Cordova框架,看了其中的源码和实现方式,当场在看的时候马上能理解,但是事后再回去看相关源码时候却发现之前理解的内容又忘记了,又不得不重新开始看,所以总觉得需要记录 ...

  9. hive集成sentry的sql使用语法

    Sentry权限控制通过Beeline(Hiveserver2 SQL 命令行接口)输入Grant 和 Revoke语句来配置.语法跟现在的一些主流的关系数据库很相似.需要注意的是:当sentry服务 ...

  10. Spring Boot 构建 WAR和JAR 文件

    原文:https://github.com/x113773/testall/issues/3 ## JAR文件方式一:1. 修改[pom.xml](https://github.com/x113773 ...