日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

2009 最优贸易

發(fā)布時(shí)間:2025/6/17 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2009 最优贸易 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最優(yōu)貿(mào)易

題目描述

C 國(guó)有n 個(gè)大城市和m 條道路,每條道路連接這n 個(gè)城市中的某兩個(gè)城市。任意兩個(gè)
城市之間最多只有一條道路直接相連。這m 條道路中有一部分為單向通行的道路,一部分
為雙向通行的道路,雙向通行的道路在統(tǒng)計(jì)條數(shù)時(shí)也計(jì)為1 條。
C 國(guó)幅員遼闊,各地的資源分布情況各不相同,這就導(dǎo)致了同一種商品在不同城市的價(jià)
格不一定相同。但是,同一種商品在同一個(gè)城市的買入價(jià)和賣出價(jià)始終是相同的。
商人阿龍來到 C 國(guó)旅游。當(dāng)他得知同一種商品在不同城市的價(jià)格可能會(huì)不同這一信息
之后,便決定在旅游的同時(shí),利用商品在不同城市中的差價(jià)賺回一點(diǎn)旅費(fèi)。設(shè)C 國(guó)n 個(gè)城
市的標(biāo)號(hào)從1~ n,阿龍決定從1 號(hào)城市出發(fā),并最終在n 號(hào)城市結(jié)束自己的旅行。在旅游的
過程中,任何城市可以重復(fù)經(jīng)過多次,但不要求經(jīng)過所有n 個(gè)城市。阿龍通過這樣的貿(mào)易方
式賺取旅費(fèi):他會(huì)選擇一個(gè)經(jīng)過的城市買入他最喜歡的商品——水晶球,并在之后經(jīng)過的另
一個(gè)城市賣出這個(gè)水晶球,用賺取的差價(jià)當(dāng)做旅費(fèi)。由于阿龍主要是來C 國(guó)旅游,他決定
這個(gè)貿(mào)易只進(jìn)行最多一次,當(dāng)然,在賺不到差價(jià)的情況下他就無需進(jìn)行貿(mào)易。
假設(shè) C 國(guó)有5 個(gè)大城市,城市的編號(hào)和道路連接情況如下圖,單向箭頭表示這條道路
為單向通行,雙向箭頭表示這條道路為雙向通行。

假設(shè) 1~n 號(hào)城市的水晶球價(jià)格分別為4,3,5,6,1。
阿龍可以選擇如下一條線路:1->2->3->5,并在2 號(hào)城市以3 的價(jià)格買入水晶球,在3
號(hào)城市以5 的價(jià)格賣出水晶球,賺取的旅費(fèi)數(shù)為2。
阿龍也可以選擇如下一條線路 1->4->5->4->5,并在第1 次到達(dá)5 號(hào)城市時(shí)以1 的價(jià)格
買入水晶球,在第2 次到達(dá)4 號(hào)城市時(shí)以6 的價(jià)格賣出水晶球,賺取的旅費(fèi)數(shù)為5。

現(xiàn)在給出 n 個(gè)城市的水晶球價(jià)格,m 條道路的信息(每條道路所連接的兩個(gè)城市的編號(hào)
以及該條道路的通行情況)。請(qǐng)你告訴阿龍,他最多能賺取多少旅費(fèi)。

輸入描述?Input Description

第一行包含 2 個(gè)正整數(shù)n 和m,中間用一個(gè)空格隔開,分別表示城市的數(shù)目和道路的
數(shù)目。
第二行 n 個(gè)正整數(shù),每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格隔開,按標(biāo)號(hào)順序分別表示這n 個(gè)城
市的商品價(jià)格。
接下來 m 行,每行有3 個(gè)正整數(shù),x,y,z,每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格隔開。如果z=1,
表示這條道路是城市x 到城市y 之間的單向道路;如果z=2,表示這條道路為城市x 和城市
y 之間的雙向道路。

輸出描述

包含1 個(gè)整數(shù),表示最多能賺取的旅費(fèi)。如果沒有進(jìn)行貿(mào)易,
則輸出0。

樣例輸入

5 5
4 3 5 6 1
1 2 1
1 4 1
2 3 2
3 5 1
4 5 2

?

樣例輸出

5

?

數(shù)據(jù)范圍及提示

【數(shù)據(jù)范圍】
輸入數(shù)據(jù)保證 1 號(hào)城市可以到達(dá)n 號(hào)城市。
對(duì)于 10%的數(shù)據(jù),1≤n≤6。
對(duì)于 30%的數(shù)據(jù),1≤n≤100。
對(duì)于 50%的數(shù)據(jù),不存在一條旅游路線,可以從一個(gè)城市出發(fā),再回到這個(gè)城市。
對(duì)于 100%的數(shù)據(jù),1≤n≤100000,1≤m≤500000,1≤x,y≤n,1≤z≤2,1≤各城市
水晶球價(jià)格≤100。

解析

對(duì)于每個(gè)點(diǎn),求出到達(dá)該點(diǎn)得到的最小價(jià)格和該點(diǎn)到n的最大價(jià)格,在每個(gè)點(diǎn)最大值和最小值之差中找最大值就得到答案了;

?

#include<cstdio> #include<queue> #include<cstring> using namespace std; struct node{int to,next; }q[1000002],p[1000002]; int n,m,head[100002]={0},head2[100002]={0},low[100002],ma[100002]; int a[100002],x,y,z,cnt,ans; int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a>b?b:a;} int add(int x,int y){ //邊表; cnt++;q[cnt].to=y; //第cnt條邊所指向的點(diǎn); q[cnt].next=head[x]; //指向與第cnt條邊有共同起點(diǎn)、上一次讀入的邊; head[x]=cnt; //指向x最后讀入的一第條邊; p[cnt].to=x; /*反向存邊*/ p[cnt].next=head2[y];head2[y]=cnt; } void spfa(){queue<int> d;d.push(1);memset(low,0x7f,sizeof(low));low[1]=a[1];while(!d.empty()){int t=d.front();d.pop();for(int i=head[t];i;i=q[i].next){ //統(tǒng)計(jì)從1到達(dá)與t相連的點(diǎn)now時(shí)的最小值; int now=q[i].to;if(low[now]>min(a[now],low[t]))low[now]=min(a[now],low[t]),d.push(now);}} } void spfa2(){queue<int> d;d.push(n);memset(ma,0,sizeof(ma));ma[n]=a[n];while(!d.empty()){int t=d.front();d.pop();for(int i=head2[t];i;i=p[i].next){ //統(tǒng)計(jì)從n到達(dá)與t相連的點(diǎn)now時(shí)的最大值; int now=p[i].to;if(ma[now]<max(a[now],ma[t])){ma[now]=max(a[now],ma[t]);d.push(now);}}} } int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",a+i);for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);add(x,y);if(z==2) add(y,x);}spfa();spfa2();for(int i=1;i<=n;i++) ans=max(ans,ma[i]-low[i]);printf("%d\n",ans);return 0; } View Code

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/qingang/p/5717011.html

總結(jié)

以上是生活随笔為你收集整理的2009 最优贸易的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。