Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33247 林芳菲 【J】T3 C++ 编译错误 0 0 MS 0 KB 1333 2024-10-04 18:39:37

Tests(0/0):


#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std; int n, q, cnt; int dis[100010]; int vis[100010]; struct edge { int y, w; } ; edge p[100010]; struct node { int x, d; operator < (const node & b) const { return d > b.d; } } ; int dijkstra(int s, int t) { priority_queue<node> q; memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); q.push((node){s, 0}); dis[s] = 0; int ans = 0x3f3f3f3f; while (q.size()) { int x = q.top().x; q.pop(); if (vis[x]) continue; vis[x] = 1; if (x <= t) ans = min(ans, dis[x]); for (int i = 1; i <= cnt; i++) { if (dis[x / p[i].y] > dis[x] + p[i].w) { dis[x / p[i].y] = dis[x] + p[i].w; q.push((node){x / p[i].y, dis[x / p[i].y]}); } } } return ans; } int main() { freopen("div.in", "r", stdin); freopen("div.out", "w", stdout); scanf("%d %d", &n, &q); for (int i = 1; i <= n; i++) { int w; scanf("%d", &w); while (cnt != 0 && p[cnt].w >= w) cnt--; p[++cnt] = (edge){i, w}; } while (q--) { int x, y; scanf("%d %d", &x, &y); cout << dijkstra(x, y) << endl; } fclose(stdin); fclose(stdout); return 0; }


测评信息: