首页 > 其他分享 >P6961 [NEERC2017] Journey from Petersburg to Moscow

P6961 [NEERC2017] Journey from Petersburg to Moscow

时间:2023-09-19 22:13:49浏览次数:49  
标签:cnt val vis int P6961 Journey 权值 NEERC2017 now

P6961

感觉很神奇的题。

一条路径的代价是前 \(k\) 大的边的权值和,有个假的做法是每个点维护一个堆,表示走到这个点前 \(k\) 大边的权值,读者可以思考一下这个做法为什么是假的。

既然直接最短路不好处理,自己观察性质,可以发现前 \(k\) 条边权值和等价于每条边边权变为 \(\max(val-val_k,0)\),然后跑最短路后 \(dis_n+k\times val_k\)。

一开始的想法是三分,因为感觉这个东西是凸的。

image.png

上图的矩形高度代表一条路径每条边的权值(已进行排序),显然黄色的部分是实际的路径权值。

如果你选的 \(val_1 < val_k\),那么相当于多算了红色的部分。而如果选的 \(val_2>val_k\),那么相当于多算了绿色的部分,所以这个函数是凸的(感性理解)。

但是如果直接三分会有问题,这个函数可能有连续函数值相等的一段,所以不能三分。

发现 \(val\) 只有在等于原图中边的权值才是有意义的,结合数据范围,可以直接枚举每一条边作为 \(val_k\),取最小值。

注意题目要求:如果经过的边数小于 \(k\),权值为路径权值,所以先跑一边 dijistra,初始答案为 \(dis_n\)。

int n,m,p,cnt,l,r,mid,ans=INF,vis[3001],d[3001],e[3001],head[3001],v[6001],to[6001],nex[6001],numa[6001];
inline void add(int x,int y,int z){to[++cnt]=y,v[cnt]=z,nex[cnt]=head[x],head[x]=cnt;}
priority_queue<pii> q;
void dijkstra(int val)
{
	q.e(mp(0,1)),memset(d,127,sizeof(d)),memset(vis,0,sizeof(vis)),d[1]=0;
	while(!q.empty())
	{
		int now=q.top().se;q.pop();
		if(vis[now])continue;
		vis[now]=1;
		for(int i=head[now],va;i;i=nex[i])
		{
			va=max(v[i]-val,0ll);
			if(d[to[i]]>d[now]+va)
			d[to[i]]=d[now]+va,q.e(mp(-d[to[i]],to[i]));
		}
	}
}
inline void mian()
{
	read(n,m,p);int x,y,z;
	for(int i=1;i<=m;++i)read(x,y,z),numa[i]=z,add(x,y,z),add(y,x,z);
	sort(numa+1,numa+1+m);
	dijkstra(0),ans=d[n];
	for(int i=1;i<=m;++i)if(numa[i]!=numa[i-1])dijkstra(numa[i]),ans=min(ans,d[n]+p*numa[i]);
	write(ans);
}

标签:cnt,val,vis,int,P6961,Journey,权值,NEERC2017,now
From: https://www.cnblogs.com/WrongAnswer90-home/p/17715953.html

相关文章

  • 【POJ 2488】A Knight‘s Journey 题解(深度优先搜索)
    背景骑士厌倦了一次又一次地看到同样的黑白方块,决定去旅行全世界每当骑士移动时,它是一个方向上的两个正方形和一个垂直于这个方向的正方形。骑士的世界就是他生活的棋盘。我们的骑士生活在一个棋盘上,这个棋盘的面积比普通的8*8棋盘小,但它仍然是矩形的。你能帮助这位冒险的骑士制......
  • Midjourney充值失败完美解决方案及共享会员:Error: subscription already active for u
    Midjourney账号充值遇到避坑指南:今天给Midjourney账号充值遇到如下错误:Error:subscriptionalreadyactiveforuser:09e6aa4a-f7a8-4451-ae2c-9a9e5c2c522a问题是之前充值后把连续续费取消了,但是现在过期了,打算重新续费,结果就这样了。解决方案:1.Midjourney会在续费失败时......
  • 「题解」Codeforces 1063F String Journey
    先reverse一下。不难看出选出的字符串长度为\(1,2,\cdots,k\)一定不劣,仅考虑这种形式的。然后考虑一手dp,设\(f_{i}\)表示最后一个子串是\(i\)为结尾,最长长度是多少。这样转移就是\(f_i\getsf_{j}+1,iff\s[j-f_j+1,j]\text{is}s[i-f_j,i]\text{'ssubstring}\)......
  • SDXL 1.0出图效果直逼Midjourney!手把手教你快速体验!
    介绍最近,StabilityAI正式推出了全新的SDXL1.0版本。经过我的实际测试,与之前的1.5版本相比,XL的效果有了巨大的提升,可以说是全方位的超越。不仅在理解提示词方面表现出色,而且图片的构图、颜色渲染和画面细腻程度都有了很大的进步,实际出图效果堪比Midjourney。此外,该版本还继续采......
  • Midjourney API 申请和接入小白教程
    MidjourneyAPI为开发者提供了快速接入Midjourney平台的能力,它允许开发者通过简单的代码调用来访问Midjourney平台上的生成高质量的图像能力。本文将提供一份MidjourneyAPI的入门教程,以帮助开发者快速了解如何申请和接入该API。申请APIKey申请MidjourneyAPI的第一......
  • AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】
    Midjourney案例分享图片预览迪士尼风格|可爱头像高清原图及关键词Prompt已经放在文末网盘,需要的自取在数字艺术的新时代,人工智能绘画已经迅速崭露头角。作为最先进的技术之一,AI绘画结合了艺术和科学,开启了一片全新的视觉探索领域。本篇文章将深入介绍AI绘画的迪士尼风格可爱......
  • A Compiler Writing Journey
     DoctorWkt/acwj:ACompilerWritingJourney(github.com) ACompilerWritingJourneyInthisGithubrepository,I'mdocumentingmyjourneytowriteaself-compilingcompilerforasubsetoftheClanguage.I'malsowritingoutthedetailssot......
  • AI制图工具丨Midjourney产品功能介绍
    ​了解如何使用Discord上的MidjourneyBot通过简单的文本提示创建自定义图像Midjourney是一款AI制图工具,只要关键字,就能透过AI算法生成相对应的图片,只需要不到一分钟。可以选择不同画家的艺术风格,例如安迪华荷、达芬奇、达利和毕加索等,还能识别特定镜头或摄影术语。有别于谷歌......
  • P3422 [POI2005] LOT-A Journey to Mars
    前言传送门blog长沙市一中暑假第一次思维训练。前置芝士前缀和单调队列思路在考试过程中突然发现与好消息,坏消息题目大致相同,不同之处只有这个可以往逆时针方向走,以此确定本题算法——前缀和与单调队列。首先我们可以算出每一个站点可以拿到的油$p_i-d_i$,也就是油量$......
  • Restart the journey
    在开始新的旅途之前,明确一些事情。做题方法论比学习方法论重要。如何解题:泛化模型,寻找特殊性质。性质的发现:共性,特殊性,结构。考虑限制的松紧,为什么只在这个情况下能做。规约到之前遇见过的问题,需要对基本模型的认知。从简单的,边界的情况入手。利用几何/代数直观。考虑“......