Gym:101630J - Journey from Petersburg to Moscow(最短路)
题意:求1到N的最短路,最短路的定义为路径上最大的K条边。
思路:对于每种边权,假设为X,它是第K大,那么小于X的变为0,大于K的,边权-X。然后求最短路,用dis[N]+K*X更新答案。
而小于K的情况下,最短路显然就是原图的最短路。(还是不好想的
#include<bits/stdc++.h>
#define ll long long
#define mp make_pair
#define pii pair<ll,int>
#define F first
#define S second
const int maxn=;
const ll inf=1LL<<;
using namespace std;
vector<pii>G[maxn]; int vis[maxn],N; ll a[maxn],ans,dis[maxn];
void dijs(ll x)
{
priority_queue<pii,vector<pii>,greater<pii> >q;
int vis[maxn];
for(int i=;i<=N;i++) dis[i]=inf,vis[i]=;
q.push(mp(,)); dis[]=;
while(!q.empty()){
pii t=q.top(); q.pop();
int u=t.S, L=G[u].size();
for(int i=;i<L;i++){
int v=G[u][i].S; ll c=G[u][i].F-x;
if(c<) c=;
if(dis[v]>dis[u]+c){
dis[v]=dis[u]+c;
if(!vis[v]) vis[v]=,q.push(mp(dis[v],v));
}
}
vis[u]=;
}
}
int main()
{
int M,K,u,v,i; ll c;
scanf("%d%d%d",&N,&M,&K);
for(i=;i<=M;i++){
scanf("%d%d%I64d",&u,&v,&c);
G[u].push_back(mp(c,v));
G[v].push_back(mp(c,u));
a[i]=c;
}
dijs(); ans=dis[N];
for(i=;i<=M;i++) {
dijs(a[i]);
ll tmp=dis[N]+(ll)K*a[i];
ans=min(tmp,ans);
}
printf("%I64d\n",ans);
return ;
}
Gym:101630J - Journey from Petersburg to Moscow(最短路)的更多相关文章
- Codeforces Gym 101630J Travelling from Petersburg to Moscow (最短路)
题目链接 http://codeforces.com/gym/101630/attachments 题解 zyb学长的题. 先枚举第\(k\)大的边权,设其边权为\(x\),然后把每条边边权减掉\(x ...
- NEERC17 J Journey from Petersburg to Moscow
CF上可以提交. 链接 依然是很妙的解法. 我们可以枚举每一个出现过的边权$L$,然后把所有边的边权减掉这个$L$,如果小于$L$就变为$0$,然后跑一遍最短路然后加上$k * L$更新答案即可. ...
- Gym 100801J Journey to the "The World's Start"(二分+单调队列)
题意: 现在有1,2,3...N这N个站, 给定限定时间Limt, N-1种票的价格, 分别对应一个最远距离, 叫你选择一种票, 满足可以在规定时间到达N站台,而且价格最低 思路: 如果买距离为L ...
- 【CF721C】Journey(拓扑排序,最短路,DP)
题意:给一个无环的图,问用不超过T的时间从1到n最多可以经过多少个点.要求输出一条路径. 思路:因为无环,可以用DP做.不过因为时间最短的原因要拓扑排序后再DP,目测由底向上的更新也是可以的. ; . ...
- NEERC-2017
A. Archery Tournament 用线段树套set维护横坐标区间内的所有圆,查询时在$O(\log n)$个set中二分查找即可. 时间复杂度$O(n\log^2n)$. #include& ...
- 2017 NEERC
2017 NEERC Problem A. Archery Tournament 题目描述:在二维平面上,会陆续出现一些圆,以及一些询问,询问点是否在圆内,如果是,则输出那个圆,并把那个圆删掉,否则输 ...
- Gym 102056L - Eventual … Journey - [分类讨论][The 2018 ICPC Asia-East Continent Final Problem L]
题目链接:https://codeforces.com/gym/102056/problem/L LCR is really an incredible being. Thinking so, sit ...
- Gym 100801 J. Journey to the “The World’s Start” DP+单调队列优化+二分
http://codeforces.com/gym/100801 题目大意:有从左到右有n个车站,有n-1种车票,第i种车票一次最多可以坐 i 站(1<=i<=n) 每种票有固定的价钱 ...
- [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
比赛链接:http://codeforces.com/gym/100861 A模拟,注意两个特殊的缩写. #include <bits/stdc++.h> using namespace ...
随机推荐
- Hadoop--设置单一节点集群
目的 这篇文档描述如何安装和配置一个单一节点的Hadoop,以便你可以快速使用hadoop mapreduce和Hadoop Distributed File System (HDFS)的一些简单操作 ...
- python thrift hbase安装连接
默认已装好 hbase,我的版本是hbase-0.98.24,并运行 python 2.7.x 步骤: sudo apt-get install automake bison flex g++ git ...
- Spring学习五----------Bean的配置之Bean的生命周期
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...
- 封装CLLocationManager定位获取经纬度
创建调用方法,在.h文件里 #import <Foundation/Foundation.h> @interface RMMapLocation : NSObject { void (^s ...
- request 获取请求头
/********************************************************servlet页面********************************** ...
- 【Python基础】之for循环、数组字典
一. for循环实例 1.循环字符串 Python Shell: for i in "hello": print(i) h e l l o 2.循环数组Python Shell: ...
- MariaDB mysql 比较区别 选择
MariaDB数据库管理系统是MySQL的一个分支 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险. MariaDB的目的是 ...
- 百思不得姐之"我的"模块功能(六)
一 功能图和知识点 1 功能图部分:(因为网速的原因,网页部分没有载入出来,可是功能完善) 2 该部分能学到的知识点概括: >1 UITableView的使用(简单) >2 UIColle ...
- Git --更改远程分支名
git更新远程分支名字 git checkout old_branch git branch -m old_branch new_branch git push --delete origin old ...
- 对你的 REST API 进行保护的正确办法
设计好一个美丽的 REST + JSON API 之后,怎样对你的 API 进行保护?在 Stormpath,我们花了 18 个月来寻找最佳实践.将其一一实践于 Stormpath API 中并分析其 ...