牛客多校第四场 J Free 最短路
题意:
求最短路,但是你有k次机会可以把路径中某条边的长度变为0.
题解:
跑k+1次迪杰斯特拉,设想有k+1组dis数组和优先队列,第k组就意味着删去k条边的情况,每次松弛操作,松弛的两点i,j和距离l(i,j),不仅更新本组的dis数组令dis[j]=dis[i]+l[i,j],还更新下一组,令dis`[j]=dis[i],相当于删去边(i,j)
#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
#define INF 0x3f3f3f3f
struct Point{
int n,dis;
friend bool operator >(const Point &a,const Point &b){
return a.dis>b.dis;
}
friend bool operator <(const Point &a,const Point &b){
return a.dis<b.dis;
}
Point(){}
Point(int a,int b){
n=a;dis=b;
}
};
using namespace std;
int lik[][];
int dis[][];//删去了i条边后第j个点最短距离
priority_queue<Point,vector<Point>,greater<Point> > que[];
vector<Point>link[];
int main(){
int n,m,s,t,k;
scanf("%d %d %d %d %d",&n,&m,&s,&t,&k); memset(dis,INF,sizeof dis);
memset(lik,INF,sizeof lik);
for(int i=;i<=m;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a==b)continue;
else{
lik[a][b]=min(lik[a][b],c);
lik[b][a]=min(lik[b][a],c);
}
} // for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// printf("%d ",lik[i][j]);
// }
// printf("\n");
// } for(int i=;i<n;i++){
for(int j=i+;j<=n;j++){
if(lik[i][j]<INF){
link[i].push_back(Point(j,lik[i][j]));
link[j].push_back(Point(i,lik[j][i]));
} }
} // for(int i=1;i<=n;i++)printf("%d ",link[i].size()); // system("pause");
que[].push(Point(s,));
dis[][s]=; for(int i=;i<=k;i++){
while(!que[i].empty()){ Point tmp=que[i].top();
que[i].pop();
int u=tmp.n;
int nowd=tmp.dis;
if(nowd>dis[i][u])continue; // printf("*%d %d\n",u,nowd); for(int j=;j<link[u].size();j++){
int v=link[u][j].n;
int d=link[u][j].dis; if(dis[i][v]>nowd+d){
dis[i][v]=nowd+d;
que[i].push(Point(v,dis[i][v]));
} if(i<k && dis[i+][v]>nowd){
dis[i+][v]=nowd;
que[i+].push(Point(v,dis[i+][v]));
} // for(int w=0;w<=k;w++){
// for(int r=1;r<=n;r++){
// printf("%d ",dis[w][r]);
// }
// printf("\n");
// }
// printf("\n"); } }
}
// for(int w=0;w<=k;w++){
// for(int r=1;r<=n;r++){
// printf("%d ",dis[w][r]);
// }
// printf("\n");
// }
int minn=INF;
for(int i=;i<=k;i++){
minn=min(minn,dis[i][t]);
}
printf("%d\n",minn);
}
牛客多校第四场 J Free 最短路的更多相关文章
- 2019牛客多校第四场J free 最短路
free 题意 给出一个带权联通无向图,你需要从s走到t,你可以选择k条变让他们的权值为0问从s到t的最小权值是多少? 分析 思考一下,如果不带k条白嫖这个条件,那么这就是一个简单的dji就搞定了,我 ...
- 牛客多校第四场 J.Hash Function(线段树优化建图+拓扑排序)
题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{ ...
- 2019牛客多校第四场J free——分层图&&最短路
题意 一张无向图,每条边有权值,可以选择不超过 $k$ 条路使其权值变成0,求 $S$ 到 $T$ 的最短路.(同洛谷 P4568) 分析 首先,分层图最短路可以有效解决这种带有 「阶段性」的最短路, ...
- 2018牛客多校第四场 J.Hash Function
题意: 给出一个已知的哈希表.求字典序最小的插入序列,哈希表不合法则输出-1. 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n.则这个数可以被插入当且仅当第s ~ t ...
- 牛客多校第四场sequence C (线段树+单调栈)
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...
- 牛客多校第3场 J 思维+树状数组+二分
牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...
- 牛客多校第四场 F Beautiful Garden
链接:https://www.nowcoder.com/acm/contest/142/F来源:牛客网 题目描述 There's a beautiful garden whose size is n ...
- 牛客多校第五场 J:Plan
链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
链接:https://www.nowcoder.com/acm/contest/144/J来源:牛客网 skywalkert, the new legend of Beihang University ...
随机推荐
- Linux 进程间通信 消息队列
1.特点: 消息队列是IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表.用户可以在消息队列中添加消息.读取消息等. 消息队列可以按照类型来发送/接收消息(消息的类型是正整 ...
- 笔记-Linux包管理命令
一.apt, apt-get, dpkg命令 apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.使用apt-ge ...
- 批量Ping执行Bash脚本
#!/bin/bash # Ping Batch Script # 连接超时时间 TMOUT= # 最大线程数 MAX_THREAD= # 保留内存大小 MIN_MEM= # 默认ip配置,可通过 - ...
- 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务
之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...
- 《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全
引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施.这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操作相关 ...
- Python 让文件代码支持汉字
默认使用ASCII编码,改成utf8 #!/usr/bin/env python # -*- coding:utf8 -*- #coding:utf-8
- java基础编程题(2)
1.给定一个二叉树,找出其最大深度. 注:二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. /** * Definition for a binary tree node. * public ...
- Python 利用微信端口查看列车时刻表
import requests """ 该程序查看列车时刻 """ url0 = 'http://www.webxml.com.cn/Web ...
- KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRING
typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING ...
- 事件绑定addEventListener
通过addEventListener监听函数实现的dom事件绑定 addEventListener可以为当前dom添加一个事件(这个事件可以是个已有的事件),这就无法避免我们在写代码的时候重复去绑定同 ...