魔法(【CCF】NOI Online能力测试 入门组第三题)

【题目描述】

C 国由 n 座城市与 m 条有向道路组成,城市与道路都从 1 开始编号,经过 i 号道路需要 ti 的费用。

现在你要从 1 号城市出发去 n 号城市,你可以施展最多 K 次魔法,使得通过下一条道路时,需要的费用变为原来的相反数,即费用从 ti 变为 -ti。请你算一算,你至少要花费多少费用才能完成这次旅程。注意:使用魔法只是改变一次的花费,而不改变一条道路自身的 ti;最终的费用可以为负,并且一个城市可以经过多次(包括 n 号城市)。

【输入格式】

从文件 magic.in 中读入数据。

第一行三个整数 n, m, K,表示城市数、道路数、魔法次数限制。

接下来 m 行每行三个整数 ui,vi,ti,第 i 行描述 i 号道路,表示一条从 ui 到 vi 的有向道路,经过它需要花费 ti。

【输出格式】

输出到文件 magic.out 中。

仅一行一个整数表示答案。

【样例1输入】

4 3 2
1 2 5
2 3 4
3 4 1

【样例1输出】

-8

【样例1解释】

依次经过 1 号道路、2 号道路、3 号道路,并在经过 1、2 号道路前使用魔法。

【样例2输入】

2 2 2
1 2 10
2 1 1

【样例2输出】

-19

【样例2解释】

依次经过 1 号道路、2 号道路、1 号道路,并在两次经过 1 号道路前都使用魔法。

【数据范围与提示】

对于所有测试点和样例满足:

1 ≤ n ≤ 100,1 ≤ m ≤ 2500,0 ≤ K ≤ 106,1 ≤ ui,vi ≤ n,1 ≤ ti ≤ 109。

数据保证图中无自环,无重边,至少存在一条从 1 号城市到达 n 号城市的路径。

每个测试点的具体限制见下表:
在这里插入图片描述

分析

k=0

直接跑Floyd 即可得出结果(传送门:Floyd算法

k=1

设 f k,i,j 表示在使用不超过 k次魔法的情况下,从 i 到 j 的最短路。

现在我们知道了 f 0,i,j,如何得到 f 1,i,j呢?

边的规模只有 2500,我们可以直接枚举要用魔法的边,转移时强制走这条边,求最短路。

假如边 (u,v,w)用了魔法,转移方程如下:

f{1,i,j}=\min{f{0,i,j},\min f{0,i,u}+f{0,v,j}-w}

k=2

我们已经得到了 k=1k=1 的情况,如何推 k=2k=2 的情况呢?

类似于 Floyd,我们可以枚举一个中转点 k,i→k 最多用一次魔法,k→j 最多用一次魔法,合并起来就是最多两次魔法的答案了。

写成式子长这样:
f{2,i,j}=\min f{1,i,k}+f_{1,k,j}
这个可以用矩阵快速幂来优化转移,最多用 i 次魔法的结果和最多用 j次魔法的结果按照上面的转移方式合并的话,可以得到最多用 i+j 次魔法的结果

(代码我写的一直不能AC,就是找不到错误了😭,这里就不放了)
传送门:跑步(【CCF】NOI Online能力测试 入门组第二题)
文具订购(【CCF】NOI Online能力测试 入门组第一题)
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: CCF(中国计算机学会)CSP(中国软件专业人员认证)是国内一项重要的IT技术认证考试。CSP考试是由CCF织和管理的,旨在评估考生在软件开发和项目管理领域的专业技能。 CSP认证试涵盖了多个方面的知识,包括软件工程、项目管理、数据库管理、网络技术等。试通常分为选择和编程两部分,对考生的理论知识和实际应用能力进行综合测试CCF CCF CSP认证试的难度适中,目涉及的知识点丰富。通过参加CSP考试,考生不仅可以提升自己的专业技能,还可以获得一个行业认可度较高的证书。 参加CSP考试有一定的门槛,要求考生具有一定的软件开发和项目管理经验。考生需要通过报名,参加线下考试,最终取得成绩。考试内容和难度每年可能会有所调整,考生需要及时了解最新的考试大纲和目要求,为考试做好充分准备。 对于有意参加CSP考试的人来说,可以通过查阅参考书籍、参加培训班、刷练习等方式来提高自己的知识和能力。此外,还可以参加相关的学术交流活动、讲等,积极与其他从业人员交流,提高自己的专业水平。 CSP认证试的通过对于求职者来说具有一定的参考价值,可以证明自己在软件开发和项目管理领域的专业水平。对于企业来说,CSP认证也是一种可靠的招聘参考,可以帮助企业筛选出具备一定技术能力的人才。 总之,CCF CSP认证试是一个重要的IT技术认证考试,对于提升个人技术能力和求职竞争力具有一定的帮助。希望大家能够认真对待,做好充分准备,取得好的成绩。 ### 回答2: CCF(中国计算机学会)CSP(计算机软件专业技术资格认证)是中国计算机学会推出的一项专业认证考试。它旨在评估计算机软件专业人员的专业技术水平和能力。CSP认证试是CSP考试的重要组成部分。 CSP认证试覆盖了计算机软件专业的各个领域,包括计算机系统基础、软件工程、算法与数据结构、程序设计语言、数据库、计算机网络等。试内容涵盖了理论知识和实际应用,旨在全面考核考生的综合能力。 CSP认证试设置了多种型,包括选择、填空、编程等。选择考查考生对知识点的理解和记忆,填空考查考生对概念和原理的掌握,编程则考查考生的实际编程能力和解决问能力。 CSP认证试的难度逐级递增,旨在评估考生在计算机软件专业领域的深度和广度。考生需要通过对试的解答来展示自己的知识水平和能力。 参加CSP认证考试的考生可以通过自我学习、参加培训班等方式进行备考。在备考过程中,应重点掌握基础知识和常用技能,并通过解答CSP认证试进行实践和巩固。 总之,CCF CSP认证试是评估计算机软件专业人员能力的重要考核工具,通过备考和解答试,考生可以展示自己在该领域的技术水平和能力,取得CSP认证资格。 ### 回答3: CCF CSP认证试是由中国计算机学会(CCF)推出的一项计算机相关的职业技术认证。该认证试旨在评估考生在计算机科学与技术领域的理论知识和实际应用能力。通过参加并且通过CCF CSP认证试,考生可以获得相应的认证证书,这将有助于他们在职业发展和工作找寻方面的竞争力。 CCF CSP认证试包括多个专业领域,如算法设计与分析、计算机组成原理、数据库原理与应用、操作系统原理与应用、计算机网络等。试涵盖了计算机科学与技术的核心知识点和常见应用场景,以及对相关技术的理解和解决问能力。 参加CCF CSP认证试需要考生具备扎实的计算机基础知识,熟悉常见的编程语言和工具,具备一定的编程能力和计算机系统分析与设计的经验。在考试中,除了理论知识的掌握外,考生还需要具备解决实际问能力,能够独立思考,分析和解决具体的计算机科学与技术问。 通过CCF CSP认证试,考生可以证明自己在计算机领域的专业能力和知识水平,这对于求职或职业发展都具有积极的影响。同时,认证证书还能够作为考生在求职过程中的一个竞争优势,增加他们在相关职位的竞争力。 总之,CCF CSP认证试是一个评估计算机科学与技术素养的标准化考试,通过参加该考试并获得认证证书,考生可以证明自己的专业能力和知识水平,这对于提升职业竞争力和求职成功都具有积极的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值