比赛 |
2025暑期集训第8场 |
评测结果 |
AAAAAA |
题目名称 |
狼抓兔子 |
最终得分 |
100 |
用户昵称 |
hsl_beat |
运行时间 |
0.451 s |
代码语言 |
C++ |
内存使用 |
15.57 MiB |
提交时间 |
2025-08-13 11:34:36 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct wGraph
{
int _n;
vector<vector<pair<int, int>>> _edges;
explicit wGraph(int __n) : _n(__n) {
_edges.resize(__n + 1, {});
}
void addedge(int _u, int _v, int _w) {
_edges[_u].push_back({_v, _w});
}
vector<int> dijkstra(int _s) {
vector<int> _res(_n + 1, INT_MAX);
_res[_s] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> _pq;
_pq.push({0, _s});
while (!_pq.empty()) {
int _d = _pq.top().first;
int _u = _pq.top().second;
_pq.pop();
if (_d > _res[_u]) {
continue;
}
for (auto _tp : _edges[_u]) {
int _v = _tp.first;
int _w = _tp.second;
if (_res[_v] > _res[_u] + _w) {
_res[_v] = _res[_u] + _w;
_pq.push({_res[_v], _v});
}
}
}
return _res;
}
};
signed main()
{
freopen("bjrabbit.in", "r", stdin);
freopen("bjrabbit.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;
wGraph g(2 * n * m);
for (int i = 1; i <= n; ++i)
for (int j = 1; j < m; ++j) {
int tp;
cin >> tp;
g.addedge(i == 1 ? 0 : (2 * (i - 2) * (m - 1) + 2 * j - 1), i == n ? (2 * (n - 1) * (m - 1) + 1) : (2 * (i - 1) * (m - 1) + 2 * j), tp);
g.addedge(i == n ? (2 * (n - 1) * (m - 1) + 1) : (2 * (i - 1) * (m - 1) + 2 * j), i == 1 ? 0 : (2 * (i - 2) * (m - 1) + 2 * j - 1), tp);
}
for (int i = 1; i < n; ++i) {
for (int j = 1; j <= m; ++j) {
int tp;
cin >> tp;
g.addedge(j == 1 ? (2 * (n - 1) * (m - 1) + 1) : (2 * (i - 1) * (m - 1) + 2 * (j - 1)), j == m ? 0 : (2 * (i - 1) * (m - 1) + 2 * j - 1), tp);
g.addedge(j == m ? 0 : (2 * (i - 1) * (m - 1) + 2 * j - 1), j == 1 ? (2 * (n - 1) * (m - 1) + 1) : (2 * (i - 1) * (m - 1) + 2 * (j - 1)), tp);
}
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; ++j) {
int tp;
cin >> tp;
int ttp = 2 * (i - 1) * (m - 1) + 2 * j - 1;
g.addedge(ttp, ttp + 1, tp);
g.addedge(ttp + 1, ttp, tp);
}
}
cout << g.dijkstra(0)[2 * (n - 1) * (m - 1) + 1];
return 0;
}