牛客 F地鐵(最短路)
題意:
給你n個站點,m條線路(n,m<=1e5),每條線路(邊)有一個時間,代表乘坐這條線路花費的時間,有一個線路號(1-n),如果你換乘了,那麼,消耗的時間就多了abs(pre_c - now_c),問你從站點1到站點n,至少需要多少時間。
題解:
因為這個換乘的性質導致了他不能用點來貪心,也就沒有辦法使用dijkstra,下面的樣例可以說明。
但是用邊來貪心剛好滿足性質,我們設d[i]代表從i點出發經過了第i條邊的最小值,這樣就符合了貪心的原理,我們就可以根據dijkstra求出所有連線終點的所有邊的最小值,在其中取最小的即可。
#include <bits/stdc++.h>
#define ll long long
#define pi pair<ll,int>
#define mk make_pair
using namespace std;
const int maxn = 1e5+10;
const ll inf = 1e18;
int cnt;
int head[maxn];
struct Edge {
int next,v,c,t;
}G[maxn * 2];
void addA(int u,int v,int c,int t) {
G[cnt].v = v;
G[cnt].c = c;
G[cnt].t = t;
G[cnt].next = head[u];
head[u] = cnt++;
}
ll d[maxn*2];
bool vis[maxn*2];
void dij(int n,int m) {
priority_queue<pi>q;
for(int i=0;i<=2*m+2;i++)d[i] = inf,vis[i] = false;
for(int i=head[1];~i;i=G[i].next) {
int v = G[i].v;
int t = G[i].t;
d[i] = t;
q.push(mk(-d[i],i));
}
ll ans = inf;
while(!q.empty()) {
int u = q.top().second;
q.pop();
if(G[u].v == n) {
ans = min(ans , d[u]);
}
if(vis[u])continue;
vis[u] = true;
for(int i=head[G[u].v];~i;i=G[i].next) {
int v = G[i].v;
if(d[i] > d[u] + G[i].t + abs(G[i].c - G[u].c)) {
d[i] = d[u] + G[i].t + abs(G[i].c - G[u].c);
q.push(mk(-d[i],i));
}
}
}
printf("%lld\n",ans);
}
int main() {
int n,m;
while(~scanf("%d%d",&n,&m)) {
cnt = 0;
for(int i=0;i<=n;i++)head[i] = -1;
for(int i=1;i<=m;i++) {
int u,v,c,t;
scanf("%d%d%d%d",&u,&v,&c,&t);
addA(u,v,c,t);
addA(v,u,c,t);
}
dij(n,m);
}
}
相關文章
- 牛客周賽 Round 67 A~F
- 牛客周賽 Round 67 F
- 牛客周賽47 (待補F和思路)
- 牛客周賽Round 67 個人題解(A~F)
- 牛客周賽49 F 嚶嚶不想找最小喵
- 最短路:求最長最短路
- 最短路 || 最長路 || 次短路
- 2020牛客國慶集訓派對day4 F
- 牛客
- 牛客網 Coincidence(最長公共子串LCS板題)IDE
- 【牛客訓練記錄】牛客周賽 Round 69
- 【牛客訓練記錄】牛客周賽 Round 70
- 地鐵衝浪者Subway Surfers Tag for mac(地鐵跑酷遊戲)Mac遊戲
- 牛客題霸 [最長公共子串]C++題解/答案C++
- 牛客練習賽27【C 水圖 dfs求最長路】
- 【牛客】時間
- python requests 最牛攻略Python
- 牛客周賽48
- 【牛客_2020.10.20】漲薪
- 牛客錯題集
- 牛客練習賽
- 結對開發地鐵
- 牛客小白月賽105
- 牛客周賽 Round 63
- 2024 牛客多校 6
- 2024 牛客多校 7
- 2024 牛客多校 8
- 牛客周賽 Round 57
- 牛客周賽 Round 56
- 2024 牛客多校 2
- 2024 牛客多校 1
- 2023 牛客多校 5
- 2024牛客多校6
- 2024牛客多校1
- 牛客小白月賽97
- 牛客小白月賽88
- 牛客周賽 Round 40
- 牛客小白月賽89