/ WOJ /

记录详情

Wrong Answer

/in/foo.cc: In function 'void dij(ll)':
/in/foo.cc:30:9: warning: unused variable 'ds' [-Wunused-variable]
   30 |     int ds = q.top().first, u = q.top().second;
      |         ^~
# 状态 耗时 内存占用
#1 Wrong Answer 2ms 456.0 KiB
#2 Wrong Answer 1ms 540.0 KiB
#3 Wrong Answer 1ms 476.0 KiB
#4 Wrong Answer 2ms 508.0 KiB
#5 Wrong Answer 2ms 480.0 KiB
#6 Wrong Answer 1ms 536.0 KiB
#7 Wrong Answer 2ms 488.0 KiB
#8 Wrong Answer 2ms 388.0 KiB
#9 Wrong Answer 1ms 524.0 KiB
#10 Wrong Answer 1ms 496.0 KiB

代码

#include <bits/extc++.h>
#define endl '\n'
typedef long long ll;
#define int ll
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;

struct ly {
  int to, nxt, w;
} edge[1200001];

int he[400001], cnt, d[400001];

void add(int u, int v, int w) {
  edge[++cnt] = {v, he[u], w};
  he[u] = cnt;
}

bitset<400001> vis;

typedef pair<int, int> pll;

void dij(int s) {
  memset(d, 0x3f, sizeof(d));
  std::priority_queue<pll, vector<pll>, greater<pll>> q;
  d[s] = 0;
  q.push({d[s], s});
  while (q.size()) {
    int ds = q.top().first, u = q.top().second;
    q.pop();
    if (vis[u]) {
      continue;
    }
    vis[u] = 1;
    for (int i = he[u]; i; i = edge[i].nxt) {
      int v = edge[i].to;
      if (d[u] + edge[i].w < d[v]) {
        d[v] = d[u] + edge[i].w;
        q.push({d[v], v});
      }
    }
  }
}

void Main() {
  cnt = 0;
  memset(he, 0, sizeof(he));
  vis.reset();
  int n, m, T, D;
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      cin >> T;
      if (j < m) {
        add(i * (m - 1) + j, i * (m - 1) + j + 1, T);
      }
      if (i < n) {
        add(n * m + i * (m - 1) + j, n * m + (i + 1) * (m - 1) + j, T);
      }
      if (j > 1) {
        add(2 * n * m + i * (m - 1) + j, 2 * n * m + i * (m - 1) + j - 1, T);
      }
      if (i > 1) {
        add(3 * n * m + i * (m - 1) + j, 3 * n * m + (i - 1) * (m - 1) + j, T);
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      cin >> D;
      for (int k = 0; k <= 3; ++k) {
        for (int l = 0; l <= 3; ++l) {
          add(k * n * m + i * (m - 1) + j, l * n * m + i * (m - 1) + j, D);
        }
      }
    }
  }
  dij(1);
  cout << d[2 * n * m] << endl;
}

signed main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    Main();
  }
  return 0;
}
// DIJKSTRA

信息

递交者
类型
递交
题目
P1000 云剪贴板
题目数据
下载
语言
C++
递交时间
2025-03-08 10:47:47
评测时间
2025-03-08 10:47:47
评测机
分数
0
总耗时
20ms
峰值内存
540.0 KiB