眾所周知,tt 有乙隻魔法貓。
今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。 tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一張商業線車票,可以坐一站商業線。假設 tt 換乘的時間忽略不計,請你幫 tt 找到一條去喵星機場最快的線路,不然就要誤機了!
輸入
輸入包含多組資料。
每組資料第一行為 3 個整數 n, s 和 e (2 ≤ n ≤ 500, 1 ≤ s, e ≤ 100),即貓貓快線中的車站總數,起點和終點(即喵星機場所在站)編號。
下一行包含乙個整數 m (1 ≤ m ≤ 1000),即經濟線的路段條數。
接下來有 m 行,每行 3 個整數 x, y, z (1 ≤ x, y ≤ n, 1 ≤ z ≤ 100),表示 tt 可以乘坐經濟線在車站 x 和車站 y 之間往返,其中單程需要 z 分鐘。
下一行為商業線的路段條數 k (1 ≤ k ≤ 1000)。
接下來 k 行是商業線路段的描述,格式同經濟線。
所有路段都是雙向的,但有可能必須使用商業車票才能到達機場。保證最優解唯一。
輸出
對於每組資料,輸出3行。第一行按訪問順序給出 tt 經過的各個車站(包括起點和終點),第二行是 tt 換乘商業線的車站編號(如果沒有使用商業線車票,輸出"ticket not used",不含引號),第三行是 tt 前往喵星機場花費的總時間。
本題不忽略多餘的空格和製表符,且每一組答案間要輸出乙個換行
輸入樣例
4 1 4
41 2 2
1 3 3
2 4 4
3 4 5
12 4 3
輸出樣例
1 2 4
25本題商業線的引入使得問題變得複雜化,如果沒有商業線,則問題變成了簡單的圖問題中的最短路問題。
我們發現加入商業線以後有兩種做法,最短路中包含一條商業線或者不包含商業線。
對於不包含商業線的情況,我們可以求乙個最短路。
對於包含商業線的情況,因為只走一條商業線,我們可以列舉每一條商業線的情況,然後取最小。
接下來,對於走(一條)商業線的問題怎麼求短路呢?
分別從起點和終點跑一次最短路,然後取兩次的最小值
min (dis1[u]+dis2[v]+w , dis1[v]+dis2[u]+w )
最後合併以上 以上情況,取最小即可!
1 #include2 #include3 #include4
using
namespace
std;
5const
int maxn=1000010;6
int n,m,k,s,e,tot,ans=10000000
,sum;
7int
head[maxn],dis1[maxn],dis2[maxn];
8int
pre1[maxn],pre2[maxn];
9int
p[maxn],a[maxn];
10bool
flag[maxn];
11int
ans_u,ans_v,ans_w;
12struct
node
13e1[maxn];
18void add_edge(int u,int v,int
w)19
2526
void dijkstra(int u,int *dis,int *pre)
2741 flag[k]=1;42
for(int j=head[k];j;j=e1[j].next)
43if(!flag[e1[j].v]&&dis[e1[j].v]>dis[k]+e1[j].w) //
鬆弛 4448}
49}50int
main()
5170
71dijkstra(s,dis1,pre1) ;
72dijkstra(e,dis2,pre2) ;
7374 cin>>k;
75int ans=dis1[e];
76for(int i=1;i<=k;i++)
7785
if(dis2[u]+dis1[v]+w//
再次更新
8691}92
inttmp;
93if(ans_u==0)//
不需要商務線
94102
for(int i=sum;i>=2;i--) cout<"";
103 cout<1]<104 cout<<"
ticket not used
"105}
106else
//需要商務線
107115
for(int i=1;i<=sum/2;i++)
116 swap(a[i],a[sum-i+1
]);117 tmp=ans_u;
118while
(tmp)
119124
for(int i=sum;i>=2;i--) cout<"";
125 cout<1]<126 cout127}
128129
if(cin>>n>>s>>e)
130 cout每個輸出換行
131else
132break
;133
}134
return0;
135 }
東京 日帰 旅行
私 二回目 東京 旅。前回 東京 観光地 中心 旅 今回 日本 友達 勧 旅 前回 目的地 多 慌 旅 今回 予定 少 足 向 旅 前回 日本語 上手 同僚 手伝 団體 旅 今回 十分 日本文化 觸 一人 旅 私 私 気持 全然違 似 二 旅 上野駅 起點 前回 上野公園 上野動物園 淺草 秋葉原 ...
dp P2134 百日旅行
這個題目顯然有乙個n 2的做法 include include include using namespace std int f 200005 ff 200005 int n,m,p,q int main 標準的暴力 我們考慮優化 顯然q p的話直接全q就好了 然後對於ff陣列 直接不列舉了,結合...
P2134 百日旅行
重要的不是去 而是和你在一起。小紅 對小明和小紅來說,2014年7月29日是乙個美好的日子。這一天是他們相識100天的紀念日。小明 小紅,感謝你2場大考時默默的支援,100個日夜的陪伴 感謝你照亮我100個美好的日子,給我留下無數美好的回憶 在這個美好的日子裡,我準備帶你去旅行。小明和小紅還剩下n天...