題目中 k 的大小只有 10,我們可以考慮建立分層圖跑最短路
相同層中 a -> b 的權值仍為 val,不同層中 a -> b 的權值為 0,相當於免費乘坐了一次飛機
寫乙個最短路就可以啦
#include #define cios ios::sync_with_stdio(false);
#define for(i, a, b) for(register int i = a; i <= b; i++)
#define forr(i, a, b) for(register int i = a; i >= b; i--)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
template inline void read(_t &f)
while(c >= '0' && c <= '9')
f *= fu;
}template void print(t x)
template void print(t x, char t)
const int n = 4e5 + 5, m = 4e6 + 5;
struct edge g[m];
int head[n];
int n, m, k, s, t, tot;
inline void addedge(int u, int v, int val) , head[u] = tot;
}int dis[n];
priority_queue < pair > q;
void dij(int s) }}
}int main()
dij(s); int ans = 0x7fffffff;
for(register int i = 1; i <= k + 1; i++) ans = min(ans, dis[(i - 1) * n + t]);
cout << ans << endl;
return 0;
}
P4568 JLOI2011 飛行路線
alice 和 bob 現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在nn個城市設有業務,設這些城市分別標記為 00 到 n 1n 1,一共有 mm 種航線,每種航線連線兩個城市,並且航線有一定的 alice 和 bob 現在要從乙個城市沿著航線到達另乙個城市,途中可以進行轉機...
P4568 JLOI2011 飛行路線
alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在 nnn 個城市設有業務,設這些城市分別標記為 000 到 n 1n 1n 1 一共有 mmm 種航線,每種航線連線兩個城市,並且航線有一定的 alice和bob現在要從乙個城市沿著航線到達另乙個城市,途中可以進行...
洛谷 4568 JLOI2011 飛行路線
題目戳這裡 一句話題意 有n個點,m條邊的有向圖,最多可以把k條邊變為0,求從起點到終點最短距離。solution 首先看到這題目,感覺賊難,看起來像dp,貌似也有大佬這麼做,但鑑於本蒟蒻思維能力有限,經過大佬點撥後拿出了失傳已久的絕技 分層圖!廢話真多 那麼我們就可以愉快地建圖了,根據題意,建出k...