首页 > 其他分享 >P4822 [BJWC2012] 冻结

P4822 [BJWC2012] 冻结

时间:2024-12-25 21:56:58浏览次数:2  
标签:冻结 int 魔法 BJWC2012 leq SpellCard P4822 dis

P4822 [BJWC2012] 冻结

题目背景

“我要成为魔法少女!”

“那么,以灵魂为代价,你希望得到什么?”

“我要将有关魔法和奇迹的一切,封印于卡片之中„„”

在这个愿望被实现以后的世界里,人们享受着魔法卡片(SpellCard,又名符卡)带来的便捷。

现在,不需要立下契约也可以使用魔法了!你还不来试一试?

比如,我们在魔法百科全书(Encyclopedia of Spells)里用“freeze”作为关键字来查询,会有很多有趣的结果。

例如,我们熟知的 Cirno,她的冰冻魔法当然会有对应的 SpellCard 了。当然,更加令人惊讶的是,居然有冻结时间的魔法,Cirno 的冻青蛙比起这些来真是小巫见大巫了。

这说明之前的世界中有很多魔法少女曾许下控制时间的愿望,比如 Akemi Homura、Sakuya Izayoi、……

当然,在本题中我们并不是要来研究历史的,而是研究魔法的应用。

题目描述

我们考虑最简单的旅行问题吧: 现在这个大陆上有 \(N\) 个城市,\(M\) 条双向的道路。城市编号为 \(1\) ~ \(N\),我们在 \(1\) 号城市,需要到 \(N\) 号城市,怎样才能最快地到达呢?

这不就是最短路问题吗?我们都知道可以用 Dijkstra、Bellman-Ford、Floyd-Warshall等算法来解决。

现在,我们一共有 \(K\) 张可以使时间变慢 50%的 SpellCard,也就是说,在通过某条路径时,我们可以选择使用一张卡片,这样,我们通过这一条道路的时间 就可以减少到原先的一半。需要注意的是:

  1. 在一条道路上最多只能使用一张 SpellCard。
  2. 使用一张SpellCard 只在一条道路上起作用。
  3. 你不必使用完所有的 SpellCard。

给定以上的信息,你的任务是:求出在可以使用这不超过 \(K\) 张时间减速的 SpellCard 之情形下,从城市 \(1\) 到城市 \(N\) 最少需要多长时间。

对于 \(100\%\) 的数据,保证:

  • \(1 \leq K \leq N \leq 50\),\(M \leq 10^3\)。
  • \(1 \leq A_i,B_i \leq N\),\(2 \leq Time_i \leq 2 \times 10^3\)。
  • 为保证答案为整数,保证所有的 \(Time_i\) 均为偶数。
  • 所有数据中的无向图保证无自环、重边,且是连通的。

好久没有见到这么友善的最短路了,将状态设为到某个点手上还有几张 SpellCard 然后直接 dijkstra 就好了

有趣的是在这题的



中难度最低(主观认为)的评了蓝,难度最高评了绿 ???

Code:

#include<bits/stdc++.h>
const int N=55;
const int inf=1e9;
using namespace std;
struct Node{
    int x,k,val;
    bool operator < (const Node &e)const{
        return e.val<val;
    }
};
vector<tuple<int,int> > E[N];
int n,m,K;
priority_queue<Node> Q;
int dis[N][N],vis[N][N];
void init()
{
    for(int i=0;i<N;i++)for(int j=0;j<N;j++)dis[i][j]=inf;
}
void dijkstra()
{
    init();
    for(int k=K;k>=0;k--)Q.push(Node{1,k,dis[1][k]=0});
    while(!Q.empty())
    {
        Node u=Q.top();Q.pop();
        int x=u.x,k=u.k;
        //cout<<"dis:"<<x<<" "<<k<<"="<<u.val<<"\n";
        if(vis[x][k])continue;
        vis[x][k]=1;
        for(auto [y,w] : E[x])
        {
            if(dis[y][k]>dis[x][k]+w)
            {
                dis[y][k]=dis[x][k]+w;
                Q.push({y,k,dis[x][k]+w});
            }
            if(k&&dis[y][k-1]>dis[x][k]+w/2)
            {
                dis[y][k-1]=dis[x][k]+w/2;
                Q.push({y,k-1,dis[x][k]+w/2});
            }
        }
    }
}
void work()
{
    cin>>n>>m>>K;
    for(int i=1,x,y,w;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&w);
        E[x].emplace_back(y,w);
        E[y].emplace_back(x,w);
    }
    dijkstra();
    int ans=inf;
    for(int k=K;k>=0;k--)ans=min(ans,dis[n][k]);
    printf("%d",ans);
}
int main()
{
    //freopen("P4822.in","r",stdin);freopen("P4822.out","w",stdout);
    work();
    return 0;
}

标签:冻结,int,魔法,BJWC2012,leq,SpellCard,P4822,dis
From: https://www.cnblogs.com/LG017/p/18631479

相关文章

  • 腾讯优图最新开源Freeze-Omini:冻结LLM引入语音处理能力
    作者:yearn原文:https://zhuanlan.zhihu.com/p/8242564370 近年来大语言模型(LLM)的快速发展为智能应用带来了巨大机会,而语音作为自然的人机交互形式,其与LLM的结合可以显著提升用户体验。然而,传统的语音交互方式通过ASR+LLM+TTS的级联方式实现,存在高工程复杂性和较大交......
  • 大模型 freeze参数冻结哪些层?
    llamafactoryfreeze参数冻结哪些层AnswerLLaMAFactory中的freeze微调方法允许用户选择性地冻结模型的某些层,只对部分层进行微调。具体来说:freeze微调方法会根据用户设置的参数来决定冻结哪些层:可以设置num_layer_trainable参数来指定要训练的层数可以设置train_o......
  • PYTHON 代码执行错误 - 冻结 importlib._bootstrap>(1165)_find_and_load()?
    在MACOS10.15(CATALINA)上执行此PYTHON代码时出现以下错误。我正在使用IDLEShell编写PYTHON3.11。Python3.11.4(v3.11.4:d2340ef257,Jun 62023,19:15:51)[Clang13.0.0(clang-1300.0.29.30)]ondarwinType"help","copyright","credits"o......
  • 使用 callable_iterator (re.finditer) 导致 Python 冻结
    我有一个为文本的每一行调用的函数。deftokenize_line(line:str,cmd=''):matches=re.finditer(Patterns.SUPPORTED_TOKENS,line)tokens_found,not_found,start_idx=[],[],0print(matches)formatchinmatches:pass#Rest......
  • 创建 GUI 元素时 PyQt 应用程序冻结
    我正在尝试创建多个GUI元素来显示视频的文字记录,问题是它在创建GUI时冻结,因为它创建了所有GUI,例如QTextEdit、QLineEdit、QPushButtons和QGraphicsTextItems。需要创建所有这些GUI元素,以便用户可以在视频中随时编辑和更改文本。我尝试过,将GUI元素的创建放在QThr......
  • qxlsx 冻结单元格(freeze fix)
    在使用qxlsx过程中,导出的Excel要求有行列冻结功能(https://github.com/QtExcel/QXlsx)。没找到库中代码有此功能,后来在讨论组组中,发现了一个大神把这个问题解决了(https://github.com/QtExcel/QXlsx/discussions/200)。在此记录一下。吧QXlsx库的源代码及更改上传到此:https://fi......
  • [[BJWC2012] 冻结]
    [BJWC2012]冻结题目大意在能有\(k\)次机会使得某些道路变为其\(\frac{1}{2}\)长度的情况下,求\(1\)到\(n\)的最短路做法其实就是分层最短路的模板题,有\(k\)次机会减少,那么对于一个点来说就有可能是在这前使用了\(0\)~\(k\)次减少的机会到达的,每个点都有\(k\)个分身,故要建\(k+1......
  • 游戏冻结工具 -- 雪藏HsFreezer v1.78
    软件简介HsFreezer是一款多功能游戏冻结工具,它允许用户随意暂停和继续游戏,同时具备系统优化和进程管理的功能。这款软件特别适合希望在游戏加载时间节省或在游戏与其他任务之间快速切换的用户。其主要特点包括快捷键操作、单锁模式的丝滑切换,以及丰富的系统优化功能。此外,HsF......
  • Frida - Java 应用程序在替换方法后冻结
    我能否(从java反编译器中)知道类和方法的名称以替换其实现或让JVM调用我的方法而不是目标方法?(在运行时)为此,我尝试使用frida,但替换后应用程序会冻结。Env$java--versionjava17.0.112024-04-16LTSJava(TM)SE运行时环境(构建17.0.11+7-LTS-207)JavaHotSpot(TM)64位......
  • C# 冻结Excel窗口以锁定行列、或解除冻结
    在处理大型Excel工作簿时,有时候我们需要在工作表中冻结窗格,这样可以在滚动查看数据的同时保持某些行或列固定不动。冻结窗格可以帮助我们更容易地导航和理解复杂的数据集。相反,当你不需要冻结窗格时,你可能需要解冻它们以获得完整的视野。下面将介绍如何使用免费.NET库通过C#实现......