【创造一个源点去建图】【有等级限制的dijkstra(采用多次dijk方法处理)】昂贵的聘礼

这篇具有很好参考价值的文章主要介绍了【创造一个源点去建图】【有等级限制的dijkstra(采用多次dijk方法处理)】昂贵的聘礼。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原题链接

【创造一个源点去建图】【有等级限制的dijkstra(采用多次dijk方法处理)】昂贵的聘礼

题意分析

本题需要注意:

  1. 等级限制比较复杂,可以最后考虑
  2. 本题说 由 B物品 可以换 A物品,想到了B节点可以走到A节点,所以构建图
  3. 由于我们是要买一个点再开始换的,所以我们可以构建一个源点,指向所有物品,表示直接购买该物品

所以样例构图如下

【创造一个源点去建图】【有等级限制的dijkstra(采用多次dijk方法处理)】昂贵的聘礼
我们从0点开始dij,
得到dist数组,表示所有点到1节点的最短距离
那么dist[i]就表示最小花费了

问题还有一个就是:
等级制度怎么考虑?

首先我们必须买
大于首长等级-m的物品

那么出现一个问题就是

2 - 3 - 6 -5
2 - 4 - 5
现在比如 2 到 5
有这么两条路(2比3更便宜)

但是 2 不能 到 6

所以只能走 2 - 4 - 5

但是其实 3 - 6 - 5 总花费最小

所以只能多次dij

每次限制 等级区间

由于 1的等级是N
1是允许 N-m到N+m区间的

那么我们就从
N-m开始 每次是 N-m+m区间 逐渐+1
这样保证每次的路线都是合法的
然后多次dij取最小值即可

#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110, INF = 0x3f3f3f3f;

int n, m;
int w[N][N], level[N];
int dist[N];
bool st[N];

int dijkstra(int down, int up)
{
    memset(dist, 0x3f, sizeof dist);
    memset(st, 0, sizeof st);

    dist[0] = 0;
    for (int i = 1; i <= n + 1; i ++ )
    {
        int t = -1;
        for (int j = 0; j <= n; j ++ )
            if (!st[j] && (t == -1 || dist[t] > dist[j]))
                 t = j;

        st[t] = true;
        for (int j = 1; j <= n; j ++ )
            if (level[j] >= down && level[j] <= up)
                dist[j] = min(dist[j], dist[t] + w[t][j]);
    }

    return dist[1];
}

int main()
{
    cin >> m >> n;

    memset(w, 0x3f, sizeof w);
    for (int i = 1; i <= n; i ++ ) w[i][i] = 0;

    for (int i = 1; i <= n; i ++ )
    {
        int price, cnt;
        cin >> price >> level[i] >> cnt;
        w[0][i] = min(price, w[0][i]);
        while (cnt -- )
        {
            int id, cost;
            cin >> id >> cost;
            w[id][i] = min(w[id][i], cost);
        }
    }

    int res = INF;
    for (int i = level[1] - m; i <= level[1]; i ++ ) res = min(res, dijkstra(i, i + m));

    cout << res << endl;

    return 0;
}

最小生成树利用超级源点

原题链接文章来源地址https://www.toymoban.com/news/detail-465152.html

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 310;

int n;
int w[N][N];
int dist[N];
bool st[N];

int prim()
{
    memset(dist, 0x3f, sizeof dist);
    dist[0] = 0;

    int res = 0;
    for (int i = 0; i < n + 1; i ++ )
    {
        int t = -1;
        for (int j = 0; j <= n; j ++ )
            if (!st[j] && (t == -1 || dist[t] > dist[j]))
                t = j;
        st[t] = true;
        res += dist[t];

        for (int j = 0; j <= n; j ++ ) dist[j] = min(dist[j], w[t][j]);
    }

    return res;
}

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++ )
    {
        scanf("%d", &w[0][i]);
        w[i][0] = w[0][i];
    }

    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= n; j ++ )
            scanf("%d", &w[i][j]);

    printf("%d\n", prim());

    return 0;
}

到了这里,关于【创造一个源点去建图】【有等级限制的dijkstra(采用多次dijk方法处理)】昂贵的聘礼的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 尝试Google Bard并对比OpenAI ChatGPT,一个擅长创造性,一个擅长事实查询?

    通过gmail账号就可以直接登录Google Bard进行对话。(当然需要科学上网) 网址: https://bard.google.com/ 首先我们看看Google Bard的自我介绍。 从测试来看Google Bard 并不支持中文。 Google Bard虽然目前支持语言有限,但已经支持日语。 从Bard FAQ可以看到bard 支持英语,日语和韩语。 Ho

    2024年02月10日
    浏览(44)
  • 【GAI】红杉美国生成式AI:一个创造性的新世界

    红杉美国官网发表了最新一篇题为《Generative AI: A Creative New World》的文章译稿,,原文作者是红杉的两位合伙人:Sonya Huang和Pat Grady,有意思的是在文章作者一栏,赫然还写着GPT-3的大名,并且文章插图也是用Midjourney生成的,这篇文章本身就是AIGC的一个落地表现。以下是原文

    2024年02月09日
    浏览(48)
  • 创造你的第一个微信小程序:简单易懂的入门指南

    1.1 介绍 小程序是一种新的开放能力,开发者可以快速地开发一个小程序。可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 官方网址 :https://mp.weixin.qq.com/cgi-bin/wx?token=lang=zh_CN 小程序主要运行微信内部,可通过上述网站来整体了解微信小程序的开发。 首先 ,

    2024年02月05日
    浏览(105)
  • 一个简单的tensorRT mnist推理案例,模型采用代码构建

    TensorRT是NVIDIA的一个深度神经网络推理引擎,可以对深度学习模型进行优化和部署。本程序中,使用了TensorRT来加载一个已经训练好的模型并进行推理。 TRTLogger是一个日志记录类,用于记录TensorRT的运行日志。 Matrix是一个矩阵结构体,用于存储模型权重和输入输出数据。Mode

    2023年04月10日
    浏览(40)
  • 开发人员是第一个在工作中采用人工智能的群体,为什么这很重要

    从10年前作为一名开发人员开始在GitHub工作到成为首席运营官,我了解到开发人员通常是组织其他部门变革的风向标。 作为新技术和实践的早期采用者,开发人员通常是商业环境变化的风向标,这就是为什么在 GitHub,我们相信企业越了解开发人员需要什么才能茁壮成长,他们

    2024年02月19日
    浏览(67)
  • Unity限制在一个范围内移动

    Unity限制在一个范围内移动 这个例子中,我们学习Vector3.ClampMagnitude的用法,限制小球在范围内移动。 在地图上放了一个小球,让他移动,但是不想让他掉下去,限制在一个球星范围内,就好像绳子拴住了一样,可以这样来实现。 Demo小球设置 我的小球上挂的刚体,物理摩擦

    2024年02月09日
    浏览(32)
  • 【论文阅读】BERTopic:采用一个基于类的TF-IDF流程进行神经网络的主题建模

    主题模型对于在文档的集合中发现潜在的主题非常有用。近期的研究已经展示了主题建模方法作为一个聚类任务的可行性。 本文展示了BERTopic,它是一个话题模型,它通过对一个基于类的TF-IDF的变体的开发,抽取一致的话题表示。 具体来说,BERTopic采用预训练的基于transform

    2023年04月08日
    浏览(42)
  • JavaScrip实现一个有时间限制的缓存类

    🎈探索 JavaScript 中一种基于自动过期机制的时间限制缓存实现方式,提高数据缓存策略的灵活性和效率。 编写一个类,它允许获取和设置键-值对,并且每个键都有一个 过期时间 。 该类有三个公共方法: set(key, value, duration) :接收参数为整型键 key 、整型值 value 和以毫秒为

    2024年02月01日
    浏览(35)
  • GreatSQL一个关于主从复制的限制描述与规避

    分享一个在项目运维中遇到的一个主从复制限制的一个坑,项目的架构为主集群+灾备集群,每个集群为一主两从模式。主集群到灾备集群的同步为主从复制的方式,根据业务需求灾备集群需要忽略系统库跟某些配置表,所以才会触发此限制,而这个限制如果我们之前没有遇到

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包