本来在写别的题,但是被同学 $\text{cue}$ 到说我一眼秒,遂立刻报了 $\text{unrated}$ 去看看怎么个事。确实一眼,想加写不到 $\text{5 min}$ ,但是返回值忘记开 long long 导致调了一会,本来打算交一下洛谷题解嫖个咕值,结果写完了忘记提交审核了,呜呜呜分层图板子题。
如果不知道什么是分层图的话可以先去做 P4568 飞行路线) (但是个人感觉本题比P4568还简单)
对于第一个操作,实际上就是每条边的边权视为 $1$,然后进行一次移动。
对于第二个操作,可以使用分层图。
考虑建立两张图,对于第 $i$ 个点,建立一个虚点,编号为 $i+n$ 。第一张图为原方向,边权为 $1$,第二张图为相反方向,边权也为 $1$ ,即对于给定的边 $(u,v)$ ,从 $u$ 到 $v$ 连接 一条边权为 $1$ 的有向边,从 $v+n$ 向 $u+n$ 连接一条边权为 $1$ 的有向边。
因为第二个操作的花费为 $x$ ,所以每个点与对应的在另一张图上的点连接一条双向边,边权为 $x$ ,即从 $i$ 向 $i+n$ 连接一条边权为 $x$ 的无向边 因为可以随时进行多次操作二,这样也就保证了可以随时在正向图和反向图之间切换。
最后答案在 $dis[n]$ 和 $dis[n+n]$ 中取最小值即为答案,因为最后到达 $n$ 点可能处于正向图的状态,也可能处于反向图的状态。
代码 ↓
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
#define endl '\n'
#define xx first
#define yy second
const int MAXN = 4e5 + 10;
struct Edge
{
int to, next, val;
} edge[MAXN << 1];
int head[MAXN], tot = 1;
void add(int u, int v, int w)
{
edge[++tot] = {v, head[u], w};
head[u] = tot;
}
i64 dijkstra(int n)
{
priority_queue<pair<i64, int>, vector<pair<i64, int>>, greater<pair<i64, int>>> que;
vector<i64> dis(n << 1 | 1, 1e18);
vector<bool> vis(n << 1 | 1, false);
dis[1] = 0;
que.push({0, 1});
while (!que.empty())
{
int u = que.top().yy;
que.pop();
if (vis[u])
continue;
vis[u] = true;
for (int i = head[u]; i; i = edge[i].next)
{
int v = edge[i].to;
int w = edge[i].val;
if (dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
que.push({dis[v], v});
}
}
}
return min(dis[n], dis[n << 1]);
}
signed main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m, x;
cin >> n >> m >> x;
for (int i = 1; i <= m; i++)
{
int u, v;
cin >> u >> v;
add(u, v, 1);
add(v + n, u + n, 1);
}
for (int i = 1; i <= n; i++)
{
add(i, i + n, x);
add(i + n, i, x);
}
cout << dijkstra(n) << endl;
return 0;
}
新车即将上线 真正的项目,期待你的参与
新盘首开 新盘首开 征召客户!!!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com