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

[[BJWC2012] 冻结]

时间:2024-07-16 21:51:35浏览次数:17  
标签:冻结 cnt int BJWC2012 edge maxn include dis

[BJWC2012] 冻结

题目大意

在能有\(k\)次机会使得某些道路变为其\(\frac{1}{2}\)长度的情况下,求\(1\)到\(n\)的最短路

做法

其实就是分层最短路的模板题,有\(k\)次机会减少,那么对于一个点来说就有可能是在这前使用了\(0\)~\(k\)次减少的机会到达的,每个点都有\(k\)个分身,故要建\(k+1\)个层,建好之后直接跑最短路,最后"\(n\)"点有\(k+1\)个,要遍历\(n\)及它的\(k\)个分身就能得到答案

注意

每个点相当于变成了\(k+1\)个点,那么关于结点个数的数组至少要开到\(50×51=2050\),边个数的数组要开到\(1000×(50×2+51×2)=202000\)

洛谷P4822

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 3005;
int n,m,k,dis[maxn];
int cnt,head[maxn];
bool vis[maxn];
struct Edge{
	int to,len,next;
}edge[202001];
struct node{
	int id,dist;
	bool operator < (const node &x) const
	{
		return dist > x.dist;
	}
};
priority_queue <node> q;

inline void add(int u,int v,int w)
{
	cnt ++;
	edge[cnt].to = v;
	edge[cnt].len = w;
	edge[cnt].next = head[u];
	head[u] = cnt;
	return ;
}

int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		for(int j=0;j<=k;j++)
		{
			add(j*n+u,j*n+v,w);
			add(j*n+v,j*n+u,w);
		} 
        for(int j=0;j<k;j++)
        {
        	add(j*n+u,(j+1)*n+v,w/2);
			add(j*n+v,(j+1)*n+u,w/2);
		}
	}
	memset(dis,127,sizeof(dis));
	dis[1] = 0;q.push((node){1,0});
	while(!q.empty())
	{
		node M = q.top(); q.pop();
		int u = M.id;
		if(vis[u]) continue;
		vis[u] = 1;
		for(int i=head[u];i;i=edge[i].next)
		{
			int v = edge[i].to;
			if(dis[v] > dis[u] + edge[i].len)
			{
				dis[v] = dis[u] + edge[i].len;
				q.push((node){v,dis[v]});
			}
		}
	}
	int ans = 2147483647;
	for(int i=k;i>=0;i--)
		ans = min(ans,dis[i*n+n]);
	printf("%d",ans);
	return 0;
}

标签:冻结,cnt,int,BJWC2012,edge,maxn,include,dis
From: https://www.cnblogs.com/-Wind-/p/18306174

相关文章

  • 游戏冻结工具 -- 雪藏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#实现......
  • 前端组件wolfTable中关于表格冻结部分的说明
    在wolfTable中,可以使用冻结表格,这样就可以达成类似下拉滚动条的时候始终显示前几行的功能。 在这里,用组件自带的案例代码来做说明import'@wolf-table/table/dist/table.min.css';importTablefrom"@wolf-table/table";constt=Table.create('#table',()=>14......
  • 任务冻结 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/freezing-of-tasks.html任务冻结什么是任务冻结?任务冻结是一种机制,通过该机制可以在休眠或系统范围挂起(在某些架构上)期间控制用户空间进程和一些内核线程。它是如何工作的?任务冻结使用三个任务级标志,即PF_NOFREEZE、PF_FROZEN......
  • Excel--冻结标题与分割视窗
    一、冻结标题,便于阅读冻结行,在鼠标向下滑动时,首行标题不会被隐藏选中要冻结的行标题(下面一行),视图---冻结窗格---冻结首行,向下移动,首行标题始终显示,如果取消,则取消冻结 冻结列  选中要冻结的列(后面一列),视图---冻结首列,此时移动列,首列始终显示,如果取消,则取消冻结......
  • 搭建Wpf框架(18) ——DataGrid实现右冻结
    19.搭建Wpf框架(18)——DataGrid实现右冻结先上效果图: 其中,Field3和Field4为右冻结列。将一下大致思路,1.在DataGrid右边再放一个DataGrid,用来显示右冻结的列,把冻结的列从左边的DataGrid移除。2.然后左边的DataGrid右侧的滚动条隐藏,横向滚动条显示,右边的DataDataGrid右侧......
  • Android进程冻结机制
    奇怪的ANR今天遇到了个很有意思的anr问题,应用出现了anr:7696:08-2914:12:59.56489879048341IWindowManager:ANRinWindow{3b0709u0me.linjw.demo.anr}.Reason:3b0709me.linjw.demo.anr(server)isnotresponding.Waited5001msforFocusEvent(hasFocus=false)8......
  • [pytorch] 训练时冻结一部分模型的参数 —— module.requires_grad_(False)
    prologuetitle:[pytorch]训练时冻结一部分模型的参数——module.requires_grad_(False)代码用到一个解码器\(dec\),希望用它预测生成结果\(g\)的countingencode并用以计算损失,以此约束生成器生成合理的结果(能解码出正确的countingencode)但考虑到\(g\)并不准确,如果不冻结\(......
  • 「BJWC2012」冻结题解
    「BJWC2012」冻结题解一.题目"我要成为魔法少女!""那么,以灵魂为代价,你希望得到什么?""我要将有关魔法和奇迹的一切,封印于卡片之中"在这个愿望被实现以后的世界里,人们享受着魔法卡片(SpellCard,又名符卡)带来的便捷。现在,不需要立下契约也可以使用魔法了!你还不来试一试?比如,我们在......