mr_h 謀得乙份兼職——貨車司機,從此以後他將會開著貨車穿行在 c 國的各大城市之間。
c 國中有 n 座城市(編號為 1~n),並且有 m 條雙向公路,每條公路連線兩座不同的城市。貨車
從任意一座城市出發都可以抵達任意另一座城市。在每條公路上,都有乙個收費站,通過的車輛需要
交納一定過路費。可能有多條公路連線相同的兩座城市。
為了增加財政收入,c 國還在每座城市也設定了收費站。並且規定,車輛從一座城市到另一座城
市的費用是,所經過公路費用和,加上所經過的城市中費用的次大值
...(這裡的次大可以和最大相同,
但是城市不同)。
(這裡的次大可以和最大相同,
但是城市不同)。
現在 mr_h 告訴你今年 k 次業務運送貨物的起點、終點城市列表,請你幫忙計算,每次業務需要
交納的最低過路費。
第一行包含三個用乙個空格隔開的整數:n,m,k。其意義如題目描述。
第 2 到第 n+1 行:第 i+1 行包含乙個單獨的整數 c(1<=c<=100000),表示城市 i 的費用。
接下來的 m 行,每行包含三個整數 a,b,w,表示一條公路連線城市 a 和城市 b(1<=a,b<=n),
其過路費為 w(1<=w<=100000)。
最後的 k 行,每行包含兩個整數:s,t,表示一次業務的起點和終點(1<=s,t<=n 且 s!=t)。
共 k 行,每行乙個整數,表示從城市 s 到 t 的最少過路費。
copy
(如果複製到控制台無換行,可以先貼上到文字編輯器,再複製)
5 7 3253341 2 3
1 3 2
2 5 3
5 3 1
5 4 1
2 4 3
3 4 4
1 31 4
2 3
478
考試時第一反應就是列舉次小點,列舉起點預處理出每兩個點的最短路就行了,時間o(n^3*logm+k)(用堆優化的dijkstra),騙了30%的分。
後來看了正解,內心簡直是崩潰的。
首先假設:
dist[i][0]=從 k 出發到 i 點經過的點費用最大值為 a[k]的情況的最小邊費用和;
dist[i][1]=從 k 出發到 i 點經過的點費用次大值為 a[k]的情況的最小邊費用和;
一樣列舉次小點,但在計算兩兩最短路時並沒有列舉起點,直接用ans[i][j]=min(dist[i][0]+dist[j][1],dist[i][1]+dist[j][0])+val[k]就行了,時間複雜度為o(n^2*logm+k)
#include#include#include#include#include#includeusing namespace std;
#define maxn 250
#define maxm
#define dist(x)(tmp[x.pos][x.hm])
#define vis(x)(vis[x.pos][x.hm])
#define inf 0x3f3f3f3f
typedef long long int ll;
int getint()
};priority_queueque;
void insert(point newed)
}else if(val[v]==val[sc])//v可能為最大點
}else insert(newed); //把v當做更小點}}
}int main()
memset(dist,0x3f,sizeof(dist));
for(int sc=1;sc<=n;++sc)//列舉次小點
for(i=1;i<=k;++i)
//fclose(stdin);
//fclose(stdout);}/*
3 2 323
41 2 2
1 3 2
1 21 3
2 3*/
重慶市NOIP模擬賽 獨立集
知道做法竟然可以 tt color 3發,真是沒誰了。題面遠長於題解系列。有一天,乙個名叫順旺基的程式設計師從石頭裡誕生了。又有一天,他學會了氣泡排序和獨立集。在乙個圖里,獨立集就是乙個點集,滿足任意兩個點之間沒有邊。於是他就想把這兩個東西結合在一起。眾所周知,獨立集是需要乙個圖的。那麼順旺基同學創...
總結 20151017重慶市NOIP模擬賽
這場比賽有點難,考完了之後感覺要爆零了 o 這次比賽還算不錯,發揮出了正常水平 木有犯sb錯誤 主要是因為第一題亂yy寫了乙個不知道比標程慢了無數倍的 然後a掉了。藐似第一題比較關鍵,之後的比賽不能在第一題上掉以輕心。預設第一題最簡單o o 這次在比賽的前幾分鐘看了一下題目,在做的過程中先跳過了第二...
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...