P2865 [USACO06NOV]路障Roadblocks
阿新 • • 發佈:2018-11-04
次短路模板題吧
題意已經非常裸了:求無向圖的1到n次短路。
直接套用最短路(dijkstra)的主要框架。但在這個的基礎上新增另外一個數組dist2
。
走到一條邊的時候來三個判定:
dist[u] + weight < dist[v]
直接可以更新最短路,新的次短路就是曾經的最短路。dist[u] + weight > dist[v] && dist[u] + weight < dist2[v]
不可更新最短路,但可以更新次短路。dist2[u] + weight < dist2[v]
可以更新次短路。
然後就可以差不多寫出來了。
話說這道題資料水。
程式碼:
```cpp
include
include
include
const int maxn = 5005, maxm = 100005;
struct Edges
{
int next, to, weight;
} e[maxm << 1];
int head[maxn], tot;
int dist[maxn], dist2[maxn];
int n, m;
struct Heapnodes
{
int d, u;
bool operator < (const Heapnodes &rhs) const
{
return d > rhs.d;
}
};
void link(int u, int v, int w)
{
e[++tot] = (Edges){head[u], v, w};
head[u] = tot;
}
void dijkstra(int s, int t)
{
memset(dist, 0x3f, sizeof dist);
memset(dist2, 0x3f, sizeof dist2);// 0x7f???
std::priority_queue