社区讨论

萌新刚学A* WA10pts 求调!玄关

P4467[SCOI2007] k短路参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m5j1lk0k
此快照首次捕获于
2025/01/05 11:17
去年
此快照最后确认于
2025/11/04 11:57
4 个月前
查看原帖
AC on #2, 其余WA
code:
CPP
#include <bits/stdc++.h>
#define N 20005
using namespace std;
typedef pair<int, int> PI;
typedef pair<int, PI> PII;
int n, m, s, t, k, x, y, len, idx = 0, pre1[N], pre2[N], dis[N], cnt[N];
bool vis[N];
struct node
{
    int to, next, len;
} a[N];
void add(int pre[], int u, int v, int len)
{
    a[++idx] = {v, pre[u], len};
    pre[u] = idx;
}
void dijkstra()
{
    priority_queue<PI, vector<PI>, greater<PI>> heap;
    memset(dis, 127, sizeof dis);
    dis[t] = 0;
    heap.push(make_pair(0, t));
    while (heap.size())
    {
        PI u = heap.top();
        heap.pop();
        auto [d, p] = u;
        if (vis[p])
            continue;
        vis[p] = true;
        for (int i = pre2[p]; i; i = a[i].next)
        {
            int to = a[i].to;
            if (d + a[i].len < dis[to])
            {
                dis[to] = d + a[i].len;
                heap.push(make_pair(d + a[i].len, to));
            }
        }
    }
}
void a_star()
{
    priority_queue<PII, vector<PII>, greater<PII>> heap;
    heap.push(make_pair(dis[s], make_pair(0, s)));
    while (heap.size())
    {
        PII u = heap.top();
        heap.pop();
        auto [d, p] = u.second;
        cnt[p]++;
        if (cnt[p] == k && p != t)
            printf("%d-", p);
        if (cnt[t] == k)
        {
            printf("%d", d);
            return;
        }
        for (int i = pre1[p]; i; i = a[i].next)
        {
            int to = a[i].to;
            if (cnt[to] < k)
                heap.push(make_pair(d + a[i].len + dis[to], make_pair(d + a[i].len, to)));
        }
    }
    printf("No");
}
int main()
{
    scanf("%d%d%d%d%d", &n, &m, &k, &s, &t);
    while (m--)
    {
        scanf("%d%d%d", &x, &y, &len);
        add(pre1, x, y, len);
        add(pre2, y, x, len);
    }
    dijkstra();
    a_star();
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...