2019牛客多校第四场J free 最短路
free
题意
给出一个带权联通无向图,你需要从s走到t,你可以选择k条变让他们的权值为0问从s到t的最小权值是多少?
分析
思考一下,如果不带k条白嫖这个条件,那么这就是一个简单的dji就搞定了,我们再来看k的范围1000 直接乘上dji的复杂度还能过,空间也开的下,所以直接一个二维dji就搞定了
#include<bits/stdc++.h>
#include<vector>
#include<algorithm>
using namespace std;
#define pb push_back
#define F first
#define S second
#define mkp make_pair
const int maxn=1e3+5;
#define int ll
typedef long long ll;
const int inf=1e10;
int n,m,s,t,k,x,y,v;
int head[maxn],dist[maxn][maxn],vis[maxn][maxn];
struct ZZ{
int to,v,next;
}edge[maxn*4];
int cnt=0;
void add(int x,int y,int v){
edge[cnt].to=y;
edge[cnt].v=v;
edge[cnt].next=head[x];
head[x]=cnt++;
}
struct Node{
int v,id,cishu;
Node(int _v,int _id,int _cishu):v(_v),id(_id),cishu(_cishu){}
bool operator<(const Node&a)const {
return v>a.v;
}
};
priority_queue<Node>q;
void dij(){
for(int i=0;i<=n;i++){
for(int j=0;j<=k;j++){
vis[i][j]=0;
dist[i][j]=inf;
}
}
while(!q.empty())q.pop();
dist[s][k]=0;
q.push(Node(0,s,k));
while(!q.empty()){
auto tmp=q.top();
q.pop();
if(vis[tmp.id][tmp.cishu])continue;
vis[tmp.id][tmp.cishu]=1;
for(int i=head[tmp.id];i!=-1;i=edge[i].next){
int y=edge[i].to;
if(!vis[y][tmp.cishu]&&dist[y][tmp.cishu]>dist[tmp.id][tmp.cishu]+edge[i].v){
dist[y][tmp.cishu]=dist[tmp.id][tmp.cishu]+edge[i].v;
q.push(Node(dist[y][tmp.cishu],y,tmp.cishu));
}
if(tmp.cishu-1>=0&&!vis[y][tmp.cishu-1]&&dist[y][tmp.cishu-1]>dist[tmp.id][tmp.cishu]){
dist[y][tmp.cishu-1]=dist[tmp.id][tmp.cishu];
q.push(Node(dist[y][tmp.cishu-1],tmp.id,tmp.cishu-1));
}
}
}
ll ans=inf;
for(int i=0;i<=k;i++)ans=min(ans,dist[t][i]);
printf("%lld\n",ans);
//cout<<dist[t][0]<<endl;
}
int32_t main(){
scanf("%lld%lld%lld%lld%lld",&n,&m,&s,&t,&k);
for(int i=0;i<=n;i++)head[i]=-1;
for(int i=0;i<m;i++){
scanf("%lld%lld%lld",&x,&y,&v);
add(x,y,v);
add(y,x,v);
// add(x,y,-1);
// add(y,x,-1);
}
dij();
return 0;
}
2019牛客多校第四场J free 最短路的更多相关文章
- 2019牛客多校第四场J free——分层图&&最短路
题意 一张无向图,每条边有权值,可以选择不超过 $k$ 条路使其权值变成0,求 $S$ 到 $T$ 的最短路.(同洛谷 P4568) 分析 首先,分层图最短路可以有效解决这种带有 「阶段性」的最短路, ...
- 牛客多校第四场 J Free 最短路
题意: 求最短路,但是你有k次机会可以把路径中某条边的长度变为0. 题解: 跑k+1次迪杰斯特拉,设想有k+1组dis数组和优先队列,第k组就意味着删去k条边的情况,每次松弛操作,松弛的两点i,j和距 ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
- 2019牛客多校第四场 A meeting
链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...
- 2019牛客多校第四场B xor——线段树&&线性基的交
题意 给你 $n$ 个集合,每个集合中包含一些整数.我们说一个集合表示一个整数当且仅当存在一个子集其异或和等于这个整数.现在你需要回答 $m$ 次询问 ($l, r, x$),是否 $l$ 到 $r$ ...
- 2019牛客多校第四场A meeting——树的直径
题意: 一颗 $n$ 个节点的树上标有 $k$ 个点,找一点使得到 $k$ 个关键结点的最大距离最小. 分析: 问题等价于求树的直径,最小距离即为直径除2向上取整. 有两种求法,一是动态规划,对于每个 ...
- [2019牛客多校第四场][G. Tree]
题目链接:https://ac.nowcoder.com/acm/contest/884/G 题目大意:给定一个树\(A\),再给出\(t\)次询问,问\(A\)中有多少连通子图与树\(B_i\)同构 ...
- 2019牛客多校第四场D-triples I 贪心
D-triples 题意 给你一个\(n\),问至少有几个数或运算起来可以等于\(n\),并且输出数量和这个几个数.题目说明给的\(n\)一定符合条件(不会输出\(n= 1\) 之类不存在情况). 思 ...
- 2019牛客多校第四场C-sequence(单调栈+线段树)
sequence 题目传送门 解题思路 用单调栈求出每个a[i]作为最小值的最大范围.对于每个a[i],我们都要乘以一个以a[i]为区间内最小值的对应的b的区间和s,如果a[i] > 0,则s要 ...
随机推荐
- 对于tensorflow中的gradient_override_map函数的理解
# #############添加############## def binarize(self, x): """ Clip and binarize tensor u ...
- TP框架中生成带背景带文字的二维码
首先下载一个phpqrcode的包放到/vendor目录下 链接:https://pan.baidu.com/s/18jV9DypYB_PHDhD6C0iedQ 提取码:qxuo 如果只是单纯生成二维 ...
- sqlserver中判断是数字(会自动将.3识别为0.3)
SQL Server 检测是不是数字型的数据(两种方法) 检测是不是数字型的数据, 两种方法 1. ISNUMERIC ( expression ) 2. PATINDEX ( '%pattern%' ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(6.5-加-8.2-加-8.3)End-to-end_Data_Protection
6.5 End-to-end Protection Information 端到端保护信息 包含数据转存的命令可以使用端到端数据保护.在这些命令内部[位于Command Dword 12 的 [29: ...
- sublime text 3安装html-css-js prettify后使用时报错An unhandled OS error was encountered
我在安装代码格式整理插件 html-css-js prettify 后,在使用时弹出报错提示如下图 意思大概是node.js什么路径没配置对,对于开始下载sublime text 3使用到各种插件的安 ...
- 异常处理_python
一.异常处理格式: name=[1,2]data={}try: name[3] data['name']except (KeyError,IndexError) as e : #捕捉指定的几个错误类型 ...
- 微信小程序之数组操作:push与concat的区别
微信小程序中需要用到数组的操作,push和concat二者功能很相像,但有两点区别. 先看如下例子: var arr = []; arr.push(); arr.push(); arr.push([, ...
- SSH、telnet配置以及它们之间区别
命令: SSH ip domain-name www.baidu.com --配置主机名(用来远程访问) user privilege secret --配置账户名和密码 line vty --配置端 ...
- Wannafly Camp 2020 Day 1E 树与路径 - 树上差分,LCA
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 1000005; vec ...
- [CF859C] Pie Rules - dp,博弈论
有一个长度为n的序列,Alice和Bob在玩游戏.Bob先手掌握决策权. 他们从左向右扫整个序列,在任意时刻,拥有决策权的人有如下两个选择: 将当前的数加到自己的得分中,并将决策权给对方,对方将获得下 ...