Tyvj 1176 火焰巨魔的惆怅

背景

TYVJ2月月赛第一道

巨魔家族在某天受到了其他种族的屠杀,作为一个英雄,他主动担任了断后的任务,但是,在巨魔家族整体转移过后,火焰巨魔却被困住了,他出逃的方式也只有召唤小火人这一种方式,所以请你帮助他。

描述

我们把火焰巨魔所处的位置抽象成一张有向图,他的位置就是1号点位,目的就是走到第N号点位,因为小火人会裂嘛,所以我们可以看做每走一条路,小火人的数量都会加倍,而每条路上的敌人有多强,会消耗多少小火人c[i]也会给出(c[i]为负值);当然有些时候路上也会遇到魔法泉之类的东西,这时候就可以补充一些小火人咯(c[i]为正值)。如果小火人死光了,那么火焰巨魔也就可以看做是挂了,毕竟智力型英雄就是脆啊。希望你帮助火焰巨魔用最少的初始小火人逃离这次屠杀。

输入格式

第一行两个数N(<=50000),M(<=100000)表示点位数与边数。
一下M行,每行三个数a,b,c表示a,b两点间的边权是c(|c|<=10000)

输出格式

输出仅一个整数,表示最小初始小火人数。

测试样例1

输入

5 4 
1 2 -3 
1 3 -6 
3 4 1 
4 5 -9

输出

4

备注

初始小火人为4个,到3点剩2个,到4变成5个,到5剩1个。
所以初始最少为4,更少的小火人是不足以走到5号点位的。from wsd  TYVJ月赛出题组
思路:
1、由于要求的是从起点到达终点最少出发的小火人,所以是一个路径寻找问题,所以要用到最短路
2、由于小火人最少是1,所以到终点后小火人数量一定是1,否则就必须要在起点派出更多小火人
3、在最短路中,目的是求长度最小,放入队列的必要条件是可以把该点长度变小,所以此题中放入的条件是可以把所需要的火人数量变小
4、从终点开始,做spfa,则由用来松弛的点走到当前节点的最小火人数设为x,则2x + g[now][i] = d[now],可知x可能不为正整数,若为浮点数则向上取整,若x≤0,则将x设为1,然后去比较d[i]进行松弛,最后d[1]便是正确答案
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 100005;
const int maxint = ~0U>>1;
struct edge{int v;int w;
};
int n,m,vis[maxn],d[maxn];
vector<edge> g[maxn];
void input(){cin>>n>>m;int u,v,w;edge tmp;for(int i = 1;i <= m;i++){scanf("%d%d%d",&u,&v,&w);tmp.v = u;tmp.w = w;g[v].push_back(tmp);}for(int i = 1;i <= n;i++){vis[i] = 0;d[i] = maxint;}
}
void spfa(){queue<int> q;q.push(n);d[n] = 1;vis[n] = 1;int now,to,add;while(!q.empty()){now = q.front();q.pop();vis[now] = 0;for(int i = 0;i < g[now].size();i++){to = g[now][i].v;add = (d[now] - g[now][i].w) >> 1;if((d[now]-g[now][i].w) & 1) add++;if(add <= 0) add = 1;if(d[to] > add){d[to] = add;if(!vis[to]){vis[to] = 1;q.push(to);}}}}
}int main(){input();spfa();cout<<d[1];return 0;
}

转载于:https://www.cnblogs.com/hyfer/p/5811828.html

Tyvj 1176 火焰巨魔的惆怅相关推荐

  1. tyvj 火焰巨魔的惆怅

    描述 Description 我们把火焰巨魔所处的位置抽象成一张有向图,他的位置就是1号点位,目的就是走到第N号点位,因为小火人会裂嘛,所以我们可以看做每走一条路,小火人的数量都会加倍,而每条路上的敌 ...

  2. 恐怖丛林肉搏怎么玩 星星系统

    原文链接:http://zhidao.baidu.com/question/451071965.html 肉搏这个图很耐玩 和朋友玩了一个多月 很开心(虽然总被认为是挂B,很无奈)今天就把我的一点点心 ...

  3. 恐怖丛林肉搏怎么玩?星星系统。

    原文链接:http://zhidao.baidu.com/question/451071965.html 肉搏这个图很耐玩 和朋友玩了一个多月 很开心(虽然总被认为是挂B,很无奈) 今天就把我的一点点 ...

  4. War3快捷键大全—通用快捷键

    通用快捷键: A---攻击 B---建造/主基地升级背包技能 G---攻城单位攻击指定区域/所有农民采集 H---停止 M---移动/各族商店魔法药水 O---英雄技能选择 P---巡逻/各族商店生命 ...

  5. 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  6. 在CentOS 6.6 x86_64上安装SystemTap/Perf+FlameGraph玩转火焰图实录

    下面是我结合网上资料摸索出的可行的操作方法,记录在这样,以备后面继续研究.操作系统是CentOS 6.6 x86_64. 1.将内核版本升级到最新版 因为我机器上CentOS 6.6的内核版本号是2. ...

  7. 在Blender中制作火箭发射烟雾和火焰模拟的动画

    大小:1.25G 时长1h 30m 1280X720 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 在Blender中制作火箭发射烟雾和火焰模拟的动画 Animate a Rocket ...

  8. perf + 火焰图分析程序性能

    From: https://www.cnblogs.com/happyliu/p/6142929.html 1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便 ...

  9. FlameScope 更高级全面的火焰图

    FlameScope 更高级全面的火焰图 文章目录 FlameScope 更高级全面的火焰图 安装步骤 安装问题fix 使用方式 网飞(Netflix)开发的火焰图工具能够更好得呈现出一段时间内的服务 ...

最新文章

  1. Python中的Numpy(5.numpy排序)
  2. 第五季1:AP模式USB-WIFI网卡移植与测试
  3. 如何破解Mac并为其提供真正应得的精美壁纸
  4. Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。...
  5. idea通过数据库生成实体类插件_IDEA连接数据库自动生成实体类
  6. linux 程序调试日志,Linux程序调试
  7. IDEA安装JRebel插件教程
  8. matlab全景图素材,科学网—meshlab查看360度全景图像 - 王琳的博文
  9. UnityShader20.1:CommandBuffer初见(下)
  10. 【译】x86程序员手册13-第5章 内存管理
  11. Oracle中集合操作符
  12. mysql 事务 实现_什么是mysql的事务和实现
  13. 商品销售数据分析报告
  14. asp.net中commandname应用
  15. View的测量规则以及三大方法流程
  16. Win10共享文件时提示需要输入网络凭据怎么办?
  17. Shiro session过期跳转到登录页面问题
  18. 图形2d,3d加速简介
  19. 【YOLOv5-6.x】模型参数量param及计算量FLOPs解析
  20. 史上最详细Mysql免安装版教程

热门文章

  1. An internal error occurred during: Launching New_configuration.
  2. 生成的数据库脚本没有注释?
  3. CMake 常用的预定义变量
  4. Java第一章java语言的概述
  5. android 连接指定wifi
  6. JQuery 加载 CSS、JS 文件
  7. EntityFramework中常用的数据删除方式
  8. 常用正则:身份证号码验证正则表达式
  9. [转]一个老工程师给年轻工程师的忠告
  10. Oracle数据库自动存储管理(ASM)