天堂一区_新91在线_在线免费观看污污视频_99热只有精品在线观看_人人看黄色_www.97色.com

加载中...
您的位置:首页 >焦点 > 正文

1163 Dijkstra Sequence + 层序遍历 + 链式前向星

2023-05-07 15:17:19 来源:博客园


(相关资料图)

PAT题目链接:https://pintia.cn/problem-sets/994805342720868352/exam/problems/1478635670373253120

这题踩了太多坑,本来没什么内容,硬是断断续续查了三天的bug:

第一天: 循环的时候内部判断逻辑不要写在for循环里,否则本该continue的逻辑,硬生生变成了break。我真是脑袋瓜秀逗了才会这么写代码。第二天: 混淆了dijkstra和一般最短路算法的思想,导致迟迟得不到想要的结果。最后参考了层序遍历的思想,改掉了这个bug。第三天: 题目说Ne不超过105,但是开边的时候数组要开205, 因为是双向的。最后那个段错误又卡了我好久。

#include#include#include#include#includeusing namespace std;int n, m, k;struct edge {    int to, next, c;} g[200005];int head[1005], dis[1005], vis[1005], cnt;inline void add(int a, int b, int c) {    g[++cnt] = edge{b, head[a], c};    head[a] = cnt;}bool spfa(vector &arr) {    memset(vis, 0, sizeof(vis));    memset(dis, 0x3f3f3f3f, sizeof(dis));    queue q;    int idx = 0;     q.push(arr[idx++]);    dis[arr[0]] = 0;    vis[arr[0]] = 1;    while (q.size()) {        // 灵感来源——层序遍历        int size = q.size();        // 上一波出队, 更新状态        for (int j = 0; j < size; j++) {            int ind = q.front(); q.pop();            for (int i = head[ind]; i; i = g[i].next) {                int to = g[i].to, c = g[i].c;                if (dis[ind] + c < dis[to]) dis[to] = dis[ind] + c;            }        }        // 下一波入队        int min_dis = 0x3f3f3f3f;        set v;        for (int to = 1; to <= n; to++) {             if (to == arr[0]) continue;            if (!vis[to]) {                if (dis[to] < min_dis) {                    min_dis = dis[to];                    v.clear();                    v.insert(to);                } else if (dis[to] == min_dis) {                    v.insert(to);                }            }        }        while (v.size()) {            if (v.find(arr[idx]) != v.end()) {                q.push(arr[idx]); vis[arr[idx]] = 1;                v.erase(arr[idx]);                idx++;            } else {                return false;            }        }    }    return idx == n;}int main() {    cin >> n >> m;    for (int i = 0; i < m; i++) {        int a, b, c;        cin >> a >> b >> c;        add(a, b, c);        add(b, a, c);    }    cin >> k;    while (k--) {        vector arr(n);        for (int i = 0; i < n; i++) cin >> arr[i];        if (spfa(arr)) cout << "Yes\n";        else cout << "No\n";    }    return 0;}

关键词:

推荐内容

主站蜘蛛池模板: 玖玖爱zh综合伊人久久 | 久久精品久久久久观看99水蜜桃 | 久久久国产精品va麻豆 | 欧美一区二区三区在线观看 | 亚洲成人毛片 | 国产精品一区久久精品 | 亚洲男人av香蕉爽爽爽爽 | 精品欧美日韩一区二区三区 | 国产精品久久一区二区三区 | 男人添女人下面免费网站 | 国产精品99久久99久久久动漫 | 秋霞免费韩国理论片 | 思思久久好好热精品国产 | 国产图片亚洲精品一区 | 九九热这里只有国产精品 | 国产成人免费午夜性视频 | 亚洲日本欧美日韩中文字幕 | 美女视频黄频大全免费 | 欧美精品亚洲精品日韩专 | 成年人国产视频 | 亚洲色丰满少妇高潮18p | 欧美牲交a欧美牲交aⅴ久久 | 欧美日韩不卡一区 | 日韩免费一级片 | 亚洲精品久久久久久无码色欲四季 | 免费高清毛片 | 国产亚洲精品久久久久久无挡照片 | 青青在线国产 | 国产v综合v亚洲欧美冫 | 一边吃奶一边添p好爽高清视频 | 欧洲亚洲欧美国产日本高清 | 九九热精彩视频 | 亚欧成a人无码精品va片 | 欧美精品在线一区 | 九九九精品 | 亚洲国产精品一区二区成人片国内 | 领导边摸边吃奶边做爽在线观看 | 国产乱肥老妇精品视频 | 亚洲理伦 | 久久久久久久久久久观看 | 亚洲精品久久久久影院 |