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.pswp.cn/news/453996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453996.shtml
英文地址,請注明出處:http://en.pswp.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;使其在大多數…