图的最短路径及负圈判断

 主要基本与FloydBellman-fordSPFA 和 Dijkstra三种方法进行做题,以例题来说明。

这里给出四种算法大致对比    https://blog.youkuaiyun.com/v_JULY_v/article/details/6181485

下面进入到今天的题目

POJ 1860 Currency Exchange        http://poj.org/problem?id=1860

题目描述的概括 :

有N货币,有M个能把a、b两种货币之相互兑换的点,对每个M点,给出6个数据分别a,b货币,a兑换成b的汇率与拥金,b兑换成a的汇率与拥金。问Nike能不能经过一些兑换操作后,使原金额V增加。例如,如果你想换100美元到俄罗斯卢布兑换点,那里的汇率是29.75,而佣金是0.39,你会得到(100 - 0.39)×29.75=2963.3975卢布。

这里我们可以先把题目抽象为图,把N个货币看成N个结点,M为2 * M条边,其中每2条边分别对应了2个结点,a -> b 和 b -> a;权值就是兑换后的货币数即当拥有货币A的数量为dis[A]时,dis[B] = (dis[A] - Cab) * Rab (这里有个关键是,这里是边权不是简单是求加权,而是x不断变化的条件下,dis[B]随着dis[A]变化而再次变化)。到这里我们的图就大致建好了。

回到问题上来,如何判断金额有无增加呢?从题目中我们可以看到一个重要条件,就是最后判断金额是要回到初始货币类型的,也就是说,我们走的是一条回路(回到起点)!这时候我们可以想到最短路径中有判断负圈的说法,那么我们能不能反思向维,既然我们要求的是最大金额,那么是最大路径判断正圈。

最后得出结论 :从s出发的 “最短路径” 中如果出现了 “负圈”(其实是最大路径出现正圈),那么金额就可以在通过一些兑换后增加。(SPFA, Bellman-ford, Floyd均可实现)。

代码段(以SPFA写法为例)

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;

#define el '\n'
#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define lop(i, a, b) for(int i = (a); i <  (b); i++)
#define dwn(i, a, b) for(int i = (a); i >= (b); i--)
#define ms(a, b) memset(a, b, sizeof(a))

const int MAXN = 200;
bool vis[MAXN];     //记录有无入队列情况
double dis[MAXN];   //到起点的最大距离,初始都为0
int num[MAXN];      //进入队列次数
int n, m, s;        //n个结点,m条边,初始点为s
double v;           //初始货币数
struct edge{
    int from, to;
    double R, C;
}temp;
vector<edge> e[MAXN];

bool spfa(int star){//用spfa求最大路径判断正圈
    queue<int> Q;
    Q.push(star);
    vis[star] = true;
    dis[star] = v;
    num[star]++;
    while(!Q.empty()){
        int u = Q.front();
        Q.pop();
        vis[u] = false;
        lop(i, 0, e[u].size()){
            int next = e[u][i].to;
            if(dis[next] < (dis[u] - e[u][i].C) * e[u][i].R){
                dis[next] = (dis[u] - e[u][i].C) * e[u][i].R;
                if(!vis[next]){
                    Q.push(next);
                    vis[next] = true;
                    num[next]++;
                    if(num[next] > n)//当一个点进队次数超过n次,说明已经无限循环了,有正圈
                        return true;
                }
            }
        }
    }
    return false;
}

int main(){
    cin >> n >> m >> s >> v;
    rep(i, 1, m){//输入
        int a, b;
        double r1, r2, c1, c2;
        cin >> a >> b >> r1 >> c1 >> r2 >> c2;
        temp.to = b, temp.R = r1, temp.C = c1;
        e[a].push_back(temp);
        temp.to = a, temp.R = r2, temp.C = c2;
        e[b].push_back(temp);
    }
    if(spfa(s))
        cout << "YES\n";
    else
        cout << "NO\n";
    return 0;
}

补充一个差分约束的思想(博主对这个理解不是很透彻,所以借用一下大佬们的解释)

https://www.cnblogs.com/zzz-hhh/p/11200893.htmlicon-default.png?t=M276https://www.cnblogs.com/zzz-hhh/p/11200893.html

睿抗机器人开发者大赛 CAIR工程竞技赛道 竞赛项目 规则书 睿抗机器人开发者大赛组委会 2024年3月 睿抗机器人开发者大赛CAIR赛道赛项规则大纲 1、项目简介 赛项名称:魔力元宝-服务型 本竞赛以智能移动机器人应用为背景,综合训练学生人工智能以及机器人技术的开发。涵盖智能机器人环境建模,自主定位,自主导航,视觉识别,二次定位,机器人智能语音系统开发,自然交互等智能机器人主流应用的开发。 本年竞赛题目分为两个组分别为服务机器人应用组和工业移动机器人应用组,本规则为服务机器人应用组规则。 服务机器人组具体完成一个智能迎宾引导机器人项目的开发。场景模拟了一个大型展馆,展馆的迎宾引导任务由机器人完成。该机器人能够完成展馆的巡游介绍,迎宾引导,语音讲解,智能交互等功能。 2、支持单位 技术支持单位:深圳市元创兴科技有限公司 运营支持单位:深圳市元创兴科技有限公司 3、竞赛交流群 QQ群:114596579 4、技术标准与规范 本项目技术主要聚焦于:机器人操作系统(ROS)开发、智能机器人的自主定位、自主导航、视觉识别、二次定位、手眼标定、机器人行动控制、智能语音交互等。 学生要求:全日制本科以及全日制高职院校在校学生。 学生知识要求:熟悉C++或python,熟悉ROS机器人操作系统开发。 5、机器人要求 ·机器人参数要求 1 机器人能够全向移动; 2 机器人最大尺寸不超过:377mm*377mm*798mm; 3 机器人具有地构建能力,机器人具有自主导航能力,机器人具有人脸识别能管理,机器人具有语音交互能力,机器人具有自主充电能力。 ·建议使用的比赛机器人 元创兴科技:Bobac_S智能迎宾机器人开发平台、Bobac_T智能服务机器人开发套件、Fox模块化机器人开发套件、Bobac_A开放式智能机器人开发平台; 6、竞赛环境 7、竞赛任务 任务1:机器人整体迎宾导览。 (1) 参赛队伍将机器人放置到出发区。 (2)裁判或志愿者通过对机器人说出“带我参观一”,机器人回复“好的,这就带您参观”。 (3)机器人按照抽取的导航顺序,依次到达导航,并语音介绍该地。机器人需在10分钟内完成任务,10分钟内没有完成中止当前比赛。 (4) 机器人完成上述任务后返回到出发。 任务2:机器人指定位置导览 (1) 裁判员或志愿者对机器人说“我要到上海馆”(五个馆随机),机器人回复:”好的,这就带您去上海馆。”,然后自主行走到上海馆,并语音介绍上海馆。 (2) 机器人完成上述任务后返回出发。 (3) 机器人需在5分钟内完成任务,5分钟内没有完成中止当前比赛。 任务3:人脸识别身份认证 (1) 裁判在参赛队员中任意挑选一名队员。 (2) 该队员向机器人询问“我是谁?”,机器人回答“好的,让我看一看”。 (3) 机器人调用笔记本摄像头通过人脸识别能够准确说出参赛队员的名字。 (4) 机器人需在5分钟内完成任务,5分钟内没有完成中止当前比赛。 (5) 比赛结束。 注:每个阶段比赛单独评分,如:第一阶段比赛过程中失败或是主动提出终止,可以继续进行第二阶段比赛,依次类推。 8、竞赛方式 省赛采用仿真方式(线上或线下)进行比赛,赛前培训会发布仿真环境以及仿真机器人; 国赛采用线下实物机器人进行比赛; 9、成绩评定 ·参赛队伍要求 比赛队伍由1~5名学生和1~2名指导老师组成,学生年龄应在16岁以上,每个学校参赛队伍数不限。 ·评分标准制定原则 公平公正。 ·评分方法 按照比赛任务完成度进行评分。 ·评分细则 得分项目 评分标准 第一阶段功能 (该阶段机器人执行整个过程不得超过10分钟,超过10分钟则比赛终止,后续未完成步骤将不得分) 1 机器人正确识别语音“带我参观一”,并在提问后准确回答“好的,这就带您参观”,得30分。 (参赛者也可以跳过该步骤,手动启动机器人从第2步开始,此步不得分) 2 机器人正确到达一个指定地标: 顺序正确:30分。 顺序错误:15分。 3 到达地标语音播报正确:20分。 4 成功返回出发:20分。 5 在机器人移动的过程中,碰撞一次墙面或是障碍物扣除10分。 6 机器人卡在一个地方不能脱困的情况下,由参赛队员选择是否要移动机器人,挪动一次扣除30分。 7 机器人冲出场地则该阶段比赛终止,未执行步骤将不得分。 第二阶段功能 (该阶段机器人执行整个过程不得超过5分钟,超过5分钟则比赛终止,后续未完成步骤将不得分) 1能够正确回应裁判员询问:30分。 2正确导航到达指定地标:30分。 3正确介绍该地标:20分。 4成功返回出发:20分。 5 在机器人移动的过程中,碰撞一次墙面或是障碍物扣除10分。 6 机器人卡在一个地方不能脱困的情况下,由参赛队员选择是否要移动机器人,挪动一次扣除30分。 7机器人冲出场地则该阶段比赛终止,未执行步骤将不得分。 第三阶段功能 (该阶段机器人执行整个过程不得超过5分钟,超过5分钟则比赛终止,后续未完成步骤将不得分) 1 机器人能够准确识别询问”我是谁?”,并回应“好的,让我看一看”得30分。 2 机器人准确说出参赛队员的名字得40分。 注:得分相同者按照第一阶段比赛准备时间判断名次,准备时间短,排名靠前。 10、裁判组成 裁判组成 “魔力元宝”赛项的裁判组由一名主裁判和一名副裁判组成。主裁判责整个比赛的监督和决策,副裁判则协助主裁判进行比赛的执裁工作。 主裁判: 主裁判是比赛的核心决策者,责监督比赛的进行,确保比赛规则的执行。主裁判应具备丰富的机器人比赛经验和专业知识,能够公正、公平地处理比赛中的各种问题。 副裁判: 副裁判协助主裁判进行比赛的执裁工作,包括对比赛规则的解释、对参赛队伍的指导、对比赛进程的监督等。副裁判应具备机器人比赛的基本知识和技能,能够快速、准确地判断比赛中的各种情况。 ·执裁过程规范 规则熟悉: 裁判在执裁过程中,必须熟悉比赛规则,确保对规则的理解准确无误。在比赛中,任何规则的变动或解释,都应以比赛规则为准。 公正公平: 裁判在执裁过程中,必须保持公正公平的态度,不受任何外界因素的影响。对于比赛中的争议,应以事实为依据,以规则为准绳,做出公正的判断。 严谨认真: 裁判在执裁过程中,必须严谨认真,对每一个细节都要仔细观察,确保比赛的公正性和准确性。对于比赛中出现的任何问题,都要及时处理,确保比赛的顺利进行。 及时沟通: 裁判在执裁过程中,应及时与参赛队伍进行沟通,解释比赛规则和要求,解答参赛队伍的问题。同时,对于比赛中出现的争议和问题,应及时与主裁判进行沟通,确保比赛的公正性和准确性。 尊重参赛队伍: 裁判在执裁过程中,应尊重参赛队伍的权益和尊严。对于参赛队伍提出的问题和建议,应认真听取并给予合理的答复和处理。同时,对于参赛队伍的失误和不足,应给予适当的指导和帮助。 维护比赛秩序: 裁判在执裁过程中,应维护比赛秩序,确保比赛的顺利进行。对于比赛中出现的混乱和干扰因素,应及时采取措施予以排除。同时,对于违反比赛规则的行为,应给予相应的处罚和警告。 保密原则: 裁判在执裁过程中,应遵守保密原则,不得泄露比赛结果和相关信息。对于比赛中出现的敏感信息和争议,应予以保密并妥善处理。同时,对于参赛队伍的技术细节和商业秘密也应予以保护。 总之,睿抗全国机器人大赛的裁判组是保证比赛公正、公平、顺利进行的重要保障。我们希望所有裁判都能够严格遵守比赛规则和执裁规范,为参赛队伍提供一个公正、公平、有序的比赛环境。 11、赛程赛制 赛程安排 “魔力元宝”赛项的赛程安排遵循公平、公正、公开的原则,确保所有参赛队伍能够在同等条件下进行比赛。以下是赛程安排的主要内容: 报名阶段:在比赛开始前,组织方会发布比赛通知,明确比赛时间、地、报名方式等。参赛队伍需在规定时间内完成报名,并提交相关材料。 省赛/预选赛阶段:省赛/预选赛采用线上或线下形式进行,参赛队伍需按照比赛规则提交机器人设计方案和演示视频。组织方根据设计方案和演示视频的质量,筛选出进入决赛的队伍。 国赛阶段:决赛采用现场形式进行,参赛队伍需携带机器人设备到指定场地进行比赛。 ·赛制设置 “魔力元宝”赛项的赛制设置旨在确保比赛的公平性和公正性,同时激发参赛队伍的竞争力和创新精神。以下是赛制设置的主要内容: 比赛规则:组织方会制定详细的比赛规则,包括比赛流程、评分标准、违规处理等。参赛队伍需严格遵守比赛规则,确保比赛的顺利进行。 评分标准:评委将根据评分标准对参赛队伍的表现进行评分,确保评分的公正性和客观性。 奖项设置:根据比赛成绩,组织方将设立多个奖项,包括一等奖、二等奖、三等奖等。 12、竞赛规格 ·熟悉场地规则 开赛前一天每队拥有30分钟熟悉场地,队伍要完成场地地构建以及相关坐标的标记。 ·入场规则 听从现场人员安排。 ·赛场规则 听从现场人员安排。 ·离场规则 听从现场人员安排。 13、赛项安全 ·赛项安全管理 无 ·比赛环境安全管理 无 14、申诉与仲裁 (1)参赛代表队对比赛等事宜有异议时,可以提出申诉。 (2)参赛选手如对裁决如有异议,可在比赛结束后提出申诉。 (3)参赛选手对赛事结果如有异议,可在成绩公示期内提出申诉。 (4)申诉均应通过本代表队领队向组委会提出。 (5)各有关人员要积极配合申诉调查工作。 (6)由大赛仲裁委员会作出裁决,并将结果及时通知相关领队。该裁决为最终裁决,各参赛代表队均不得再提出异议。 15、注意事项 无 16、附加说明(如有) 我要完成任务一
最新发布
12-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值