Codeforces Gym 101630J Travelling from Petersburg to Moscow (最短路)
题目链接
http://codeforces.com/gym/101630/attachments
题解
zyb学长的题。
先枚举第\(k\)大的边权,设其边权为\(x\),然后把每条边边权减掉\(x\)与\(0\)取\(\max\), 跑最短路之后加上\(x\times k\)更新答案。
注意从\(0\)开始枚举(就相当于裸跑最短路)。
代码
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cassert>
#include<algorithm>
#include<queue>
#include<cstring>
#define llong long long
using namespace std;
const int N = 3000;
const int M = 6000;
struct Edge
{
int v,nxt; llong w;
} e[M+3];
int fe[N+3];
struct AEdge
{
int u,v; llong w;
} ae[M+3];
struct DijNode
{
int u; llong dis;
DijNode() {}
DijNode(int _u,llong _dis) {u = _u,dis = _dis;}
bool operator <(const DijNode &arg) const {return dis>arg.dis;}
};
priority_queue<DijNode> pq;
llong dis[N+3];
bool vis[N+3];
int n,en,p,s,t,m;
void addedge(int u,int v,llong w)
{
en++; e[en].v = v; e[en].w = w;
e[en].nxt = fe[u]; fe[u] = en;
}
void clear()
{
for(int i=1; i<=m; i++) e[i].v = e[i].nxt = e[i].w = 0;
for(int i=1; i<=n; i++) fe[i] = 0;
en = 0;
}
llong Dijkstra()
{
memset(dis,42,sizeof(dis)); memset(vis,false,sizeof(vis));
dis[s] = 0ll; pq.push(DijNode(s,0));
while(!pq.empty())
{
DijNode tmp = pq.top(); pq.pop(); int u = tmp.u;
if(tmp.dis!=dis[u]) continue;
if(vis[u]==true) continue;
vis[u] = true;
for(int i=fe[u]; i; i=e[i].nxt)
{
int v = e[i].v;
if(dis[v]>dis[u]+e[i].w && vis[v]==false)
{
dis[v] = dis[u]+e[i].w;
pq.push(DijNode(v,dis[v]));
}
}
}
return dis[t];
}
int main()
{
scanf("%d%d%d",&n,&m,&p); s = 1; t = n;
for(int i=1; i<=m; i++)
{
scanf("%d%d%I64d",&ae[i].u,&ae[i].v,&ae[i].w);
}
llong ans = 10000000000000000ll;
for(int i=0; i<=m; i++)
{
for(int j=1; j<=m; j++) addedge(ae[j].u,ae[j].v,max(ae[j].w-ae[i].w,0ll)),addedge(ae[j].v,ae[j].u,max(ae[j].w-ae[i].w,0ll));
llong cur = Dijkstra();
ans = min(ans,cur+ae[i].w*p);
clear();
}
printf("%I64d\n",ans);
return 0;
}
Codeforces Gym 101630J Travelling from Petersburg to Moscow (最短路)的更多相关文章
- Gym:101630J - Journey from Petersburg to Moscow(最短路)
题意:求1到N的最短路,最短路的定义为路径上最大的K条边. 思路:对于每种边权,假设为X,它是第K大,那么小于X的变为0,大于K的,边权-X.然后求最短路,用dis[N]+K*X更新答案. 而小于K的 ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
- codeforces gym 100553I
codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...
- CodeForces Gym 100213F Counterfeit Money
CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...
- Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)
A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...
随机推荐
- UI语言杂集
最适合做 GUI 的是 DSL 或者 XML(以及 XML 的扩展)之类的标记语言,而不是编程语言. 例如 Qt 的 QML,Android 的 XML 或者 WPF 的 XAML 以及大家都再熟悉不 ...
- MySQL mysql-5.7.21-winx64.zip安装指南
一.下载mysql-5.7.21-winx64.zip压缩包 二.解压 1.在目录mysql-5.7.21-winx64下新建data文件夹 !!!如果已经存在data文件夹,请删除其中ib_logf ...
- NET Core:搭建私有Nuget服务器以及打包发布Nuget包
docker 安装 https://www.cnblogs.com/liuxiaoji/p/11014329.html 1.使用docker搭建私有Nuget服务器 docker run -d -p ...
- Spring自定义标签的实现
首先 简单写下 spring xml解析的过程 通过一段简单的 调用spring代码开始 public static void main(String[] args) { ApplicationCon ...
- golang实现RSA加密解密
非对称加密示意图: 在此可以看到,非对称加密是通过两个密钥(公钥-私钥)来实现对数据的加密和解密的.公钥用于加密,私钥用于解密. RSA公钥和私钥生成: package main import ( & ...
- 解决 /etc/init.d/php-fpm no such file or directory等相关问题
vi /etc/init.d/php-fpm #! /bin/sh # Comments to support chkconfig on CentOS # chkconfig: 2345 65 37 ...
- Java数据结构浅析
程序 = 数据结构 + 算法 本文概述Java中常用的数据结构,并简述其使用场景 1. 数据结构的定义 数据结构是一种逻辑意义,指的是逻辑上的数据组织方式及相应的处理,与数据在磁盘的具体存储方式不完全 ...
- U盘加载速度慢的解决方法
在日常的生活和工作中,我们经常用U盘存储一些文件和程序.然而,一些朋友发现U盘有时候在使用过程中的识别加载速度非常缓慢.是U盘出故障了吗?其实不尽然,下面就为大家分享一下如何快速解决U盘加载缓慢的方法 ...
- U盘被识别但不显示盘符怎么样才能解决?
很多朋友在将U盘插入电脑后,会发现右下角的任务栏虽然出现了U盘的图标,但是在我的电脑中并没有显示出U盘的盘符,也就无法继续对U盘进行操作.遇到这种情况该怎么办呢?下面好系统U盘启动就告诉大家相应的解决 ...
- contextlib:上下文管理器工具
介绍 contextlib模块包含的工具可以用于处理上下文管理器和with语句 上下文管理器API ''' 上下文管理器(context manager)负责管理一个代码块中的资源,会在进入代码块时创 ...