bzoj1927

1927: [Sdoi2010]星际竞速

Time Limit: 20 Sec  Memory Limit: 259 MB
Submit: 2556  Solved: 1580
[Submit][Status][Discuss]

Description

  10年一度的银河系赛车大赛又要开始了。作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的
梦想,来自杰森座α星的悠悠也是其中之一。赛车大赛的赛场由N颗行星和M条双向星际航路构成,其中每颗行星都
有一个不同的引力值。大赛要求车手们从一颗与这N颗行星之间没有任何航路的天体出发,访问这N颗行星每颗恰好
一次,首先完成这一目标的人获得胜利。由于赛制非常开放,很多人驾驶着千奇百怪的自制赛车来参赛。这次悠悠
驾驶的赛车名为超能电驴,这是一部凝聚了全银河最尖端科技结晶的梦幻赛车。作为最高科技的产物,超能电驴有
两种移动模式:高速航行模式和能力爆发模式。在高速航行模式下,超能电驴会展开反物质引擎,以数倍于光速的
速度沿星际航路高速航行。在能力爆发模式下,超能电驴脱离时空的束缚,使用超能力进行空间跳跃——在经过一
段时间的定位之后,它能瞬间移动到任意一个行星。天不遂人愿,在比赛的前一天,超能电驴在一场离子风暴中不
幸受损,机能出现了一些障碍:在使用高速航行模式的时候,只能由每个星球飞往引力比它大的星球,否则赛车就
会发生爆炸。尽管心爱的赛车出了问题,但是悠悠仍然坚信自己可以取得胜利。他找到了全银河最聪明的贤者——
你,请你为他安排一条比赛的方案,使得他能够用最少的时间完成比赛。

Input

  第一行是两个正整数N,M。第二行N个数A1~AN,其中Ai表示使用能力爆发模式到达行星i所需的定位时间。接下
来M行,每行3个正整数ui,vi,wi,表示在编号为ui和vi的行星之间存在一条需要航行wi时间的星际航路。输入数据
已经按引力值排序,也就是编号小的行星引力值一定小,且不会有两颗行星引力值相同。

Output

  仅包含一个正整数,表示完成比赛所需的最少时间。

Sample Input

3 3
1 100 100
2 1 10
1 3 1
2 3 1

Sample Output

12

HINT

  说明:先使用能力爆发模式到行星1,花费时间1。然后切换到高速航行模式,航行到行星2,花费时间10。之
后继续航行到行星3完成比赛,花费时间1。虽然看起来从行星1到行星3再到行星2更优,但我们却不能那样做,因
为那会导致超能电驴爆炸。N≤800,M≤15000。输入数据中的任何数都不会超过106。输入数据保证任意两颗行星
之间至多存在一条航道,且不会存在某颗行星到自己的航道。

 

感觉这个题挺神奇的。涉及到一些巧妙的转换。

一看见每个点恰好去一次,首先想到的就是拆点,每个入点向出点连容量1的边,但这个题有有点不一样,而这就是此题神秘的地方。

 

此题的困难之处:如何选择出发点。

想了很久都没有想到该怎么解决出发点的问题,翻了翻题解,发现它避开了这个问题,将其转化成了另一种思路。

 

先说建边

每个点i拆成xi,yi

S向xi连容量为1费用0的边,S向yi连容量1费用ti的边

yi向T连容量1费用0的边

对于每条给定的边u->v   w, xu->yv连容量1费用w的边

 

那么这具体表示什么意思呢?

xi表示到达这个点后的状态,应该考虑怎么走。yi表示刚到这个点,完成每个点走一次的任务。

yi向T连边是常规操作。

xu->yv是因为到达u点完成任务后,可以考虑走向下一个地方。

S->xi是因为每次在yi完成任务后我们不会到xi去,转化成S向xi走费用0,并从xi到达其他地方。

S->yi是因为从其他星球跳跃到yi可以转化成从S直接跳到yi,不用考虑起跳点是哪个星球。

 

以上建边有一个共性:只考虑结果,不考虑过程

把复杂的过程转化成了简单的过程,结果相同

 

 

再说一次,这个题目是非常有意思的。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define inf 0x3f3f3f3f
#define ll long long
#define N 1605
using namespace std;
int n,m,tot,S,T,hd[N],a[N],d[N],cur[N],vis[N],pre[N];
struct edge{int u,v,next,w,cap;}e[N*50];
void adde(int u,int v,int w,int c){e[tot].v=v;e[tot].u=u;e[tot].next=hd[u];e[tot].cap=c;e[tot].w=w;hd[u]=tot++;
}bool spfa(int &flow,int &cost){queue<int>q;memset(pre,-1,sizeof(pre));memset(d,0x3f,sizeof(d));a[S]=inf;d[S]=0;q.push(S);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=hd[u];~i;i=e[i].next){int v=e[i].v;if(e[i].cap&&d[v]>d[u]+e[i].w){d[v]=d[u]+e[i].w;pre[v]=i;a[v]=min(a[u],e[i].cap);if(vis[v])continue;vis[v]=1;q.push(v);}}}if(d[T]==inf)return 0;flow+=a[T];cost+=a[T]*d[T];int u=T;while(u!=S){e[pre[u]].cap-=a[T];e[pre[u]^1].cap+=a[T];u=e[pre[u]].u;}return 1;
}
int main(){
#ifdef wsyfreopen("data.in","r",stdin);
#else//freopen(".in","r",stdin);//freopen(".out","w",stdout);
#endifmemset(hd,-1,sizeof(hd));scanf("%d%d",&n,&m);S=0;T=n*2+1;for(int i=1;i<=n;i++){int t;scanf("%d",&t);adde(S,i,0,1);adde(i,S,0,0);adde(S,i+n,t,1);adde(i+n,S,-t,0);adde(i+n,T,0,1);adde(T,i+n,0,0);}for(int i=1;i<=m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(a,b);adde(a,b+n,c,1);adde(b+n,a,-c,0);}int flow=0,cost=0;while(spfa(flow,cost));printf("%d",cost);return 0;
}

转载于:https://www.cnblogs.com/wsy01/p/7927437.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python until怎么用_python基础之从认识python到python的使用

python的历史&#xff1a;python的创始人是吉多范罗苏姆(Guido van Rossum)&#xff0c;人称“龟叔”&#xff0c;1989年圣诞节期间&#xff0c;Guido开始写Python语言的编译器。他希望这个叫做Python的语言能符合他的理想&#xff1a;创造一种C和shell之间&#xff0c;功能全面…

前端之同源策略 Jsonp 与 CORS

同源策略 同源策略&#xff08;Same origin policy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的&#xff0c;浏览器只是针对同…

vue新手入门——vue-cli搭建

首先说明&#xff0c;以下内容vue官网都有文档&#xff0c;如果觉得麻烦啰嗦&#xff0c;请移步至 安装-vue.js 。 准备工作&#xff1a; 1.下载并安装node环境&#xff0c;一般情况下安装好node之后&#xff0c;npm也会安装好。具体安装的话&#xff0c;百度大概能帮得上忙。 …

如何看懂源代码–(分析源代码方法)

我们在写程式时&#xff0c;有不少时间都是在看别人的代码。例如看小组的代码&#xff0c;看小组整合的守则&#xff0c;若一开始没规划怎么看&#xff0c; 就会“噜看噜苦&#xff08;台语&#xff09; ” 不管是参考也好&#xff0c;从开源抓下来研究也好&#xff0c;为了了解…

linux关于安装

一&#xff0e;安装gcc gcc cloog-ppl ppl(libppl.so.7/libppl_c.so.2) cpp mpfr(libmpfr.so.1) gcc-c libstdc-devel mpfr-2.4.1-6.el6.i686.rpm和ppl-0.10.2-11.el6.i686.rpm 快捷键rz sz&#xff1a; rz、sz命令没找到&#xff1f; 安装lrzsz即可&#xff1a; shell># y…

python cmath模块_cmath模块-PYTHON

这是一个float型的常数>>> cmath.e2.718281828459045>>> type(cmath.e)文档>>> import cmath>>> help(cmath)Help on module cmath:NAMEcmathFILE/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cm…

Python 第三方模块之 pdfkit

pdfkit&#xff0c;把 HTMLCSS 格式的文件转换成 PDF 格式文档的一个工具。 其实&#xff0c;pdfkit 是 html 转成 pdf 工具包 wkhtmltopdf 的 Python 封装。所以&#xff0c;首先安装 wkhtmltopdf 。 一般情况下&#xff0c;wkhtmltopdf需要手动安装&#xff0c;网站是 https…

LNMP环境添加第三方模块

一.在LNMP环境下添加memcache模块 1.安装依赖库(libevent) [rootnode1 ~]# tar xvf libevent-2.0.21-stable.tar.gz [rootnode1 ~]# cd libevent-2.0.21-stable [rootnode1 libevent-2.0.21-stable]# ./configure --prefix/usr/local/libevent [rootnode1 libevent-2.0.21-sta…

学生成绩管理系统-程序维护

托管平台地址&#xff1a;https://gitee.com/lucess/StudentMarkManage.git 小组名称:干翻沈师 程序运行方法: 1、后台服务&#xff1a;进入项目文件夹执行 python TeamProject.py runsercer 0.0.0.0:5050 2、前台服务&#xff1a;进入./WEB-INFO/TeamProjectWeb 文件夹执行 ya…

改需求

转载于:https://www.cnblogs.com/gw2010/p/7856484.html

架构师一般做到多少岁_软件测试可以做到多大岁数?

做这个行业也几年了&#xff0c;经常听到有人问&#xff0c;软件测试这个行业能干到多少岁&#xff0c;当然里边包含想要进入这个行业的和已经在这个行业里边发展的&#xff01;基本上软件测试可以分为三条职业发展路线&#xff1a;技术路线、管理路线、产品路线&#xff01;目…

Python 第三方模块之 MySQL数据库连接模块 PyMySQL

PyMySQL的安装 pip install PyMySQL python连接数据库 import pymysqlconn pymysql.connect(hostlocalhost, userroot, password"root",databasedb, port3306, # 数字3306charsetutf8, # 不是utf-8autocommitTrue # autocommitTrue 让每次提交都去调用…

初学Spring Boot

1.Spring Boot注解 (1)SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置,实际上&#xff0c;SpringBootApplication是将三个注解组合在了一起&#xff0c;这三个注解分别是 SpringBootConfiguration&#xff0c;ComponentScan&#xff0c;Ena…

15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)

可以把它当快速简易参考看&#xff0c;主要的功能有&#xff1a; 视频格式转换音频格式转换切割视频及音频连接两段视频视频音频同步将图像系列转换成视频 这里是百鬼丸以前收集的一部分命令行视频音频编辑脚本命令&#xff0c;一直在自己的记事本里随时用&#xff0c;现在…

python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...

老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法&#xff0c;包括部件的行数、列数、当前项、当前行、当前列等属性访问方法。1、行数rowCountQTableWidget的rowCount属性保存表格部件中的行数&#xff0c;在QTableWidget创建时如果没有指定行数…

Python 内置模块之 random

常用API import random# 随机小数 print(random.random()) # 大于0且小于1之间的小数。0< n<1.0 print(random.uniform(1,3)) # 大于1小于3的小数# 随机整数 print(random.randint(1,5)) # 大于等于1且小于等于5之间的整数#从指定范围内&#xff0c;按指定基…

微信jssdk遇到的一些问题汇总

1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效&#xff0c;需要写在 wx.ready(function(){wx.startRecord(); }); 才会有效。 2.h5 的audio标签只支持ogg,mp3,wav格式的音频&#xff0c;微信jssdk录制的是amr格式的语音文件&#xf…

mongodb简单的增删改查

数据库操作&#xff1a; show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作&#xff1a;show collections&#xff1b;#查看集合创建集合、插入&#xff1a;create collection;#创建集合db.student.insert({"na…

ffmpeg-0.8 开源编码解码库从linux下移植到windows vs2005

最新 ffmpeg-0.8 开源编码解码库&#xff0c;从linux下移植到windows vs2005&#xff0c;全部开源。需要 Intel C Compile 和 开源的SDL库支持&#xff0c;由于 Intel C Compile支持C99语法&#xff0c;所以源代码改动很小很小。主要的修改1&#xff1a;添加了linux中有而windo…

python3.5.2使用教程_Python3.5.2-初级教程.docx

Python3.5.2-初级教程Python 初级教程Release:3.5.2引言Python 是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构&#xff0c;并且能够用简单而又高效的方式进行面向对象编程。Python 优雅的语法和动态类型&#xff0c;再结合它的解释性&#xff0c;使其在大多数…