牛客多校第四场 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 ...
随机推荐
- 现如今,最热门的13个Java微服务框架
曾经的 服务器领域 有许多不同的芯片架构???有哪些芯片架构???和操作系统???,经过长期发展,Java的“一次编译,到处运行”使得它在服务器领域找到一席之地,成为程序员们的最爱. 本文,我们将和大 ...
- 报错 DOMDocument not found
php -m 查看有没有dom扩展 没有安装扩展 yum install php-dom php 常用扩展有 yum install php-solr php-opcache php-seasLog ...
- Shell case in语句详解
和其它编程语言类似,Shell 也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.在<Shell if else>一节中我们讲解了 if else 语句 ...
- 26.String类(1)
1. 下面是一个使用equals的例子: 我查看了一下源代码,string类中equals方法的源代码如下: public boolean equals(Object anObject) { if ( ...
- wpf tabcontrol内的datagrid的selectionChanged事件向往传递问题
tabcontrol 内的一个tabitem里是datagrid 当程序相应datagrid的selectionchanged事件后会向上传递到tabcontrol的selectionchanged事 ...
- ZF、TP、CI等各种框架的区别
(原标题:面试常见问题之ZF.TP.CI等框架的区别 http://blog.163.com/m13341159039_1/blog/static/245953061201522092212820/) ...
- mac系统下通过安装包的形式安装mongdb
下载地址 mongoDB mongoDB 图形化管理软件 MongoDB Compass 下载完成后,进行解压,解压后的文件进行重命名 mongodb 然后前往/usr/local,将mongodb文 ...
- SPSS如何调用已建立的数据文件
SPSS如何调用已建立的数据文件 调用已建立的数据文件 SPSS可以调用SPSS(*.sav),Excel(*.xls),dBASE(*.dbf),ASCII(*.dat,*.txt)等数据文件. 2 ...
- git相关操作。
之前只会用图形端的GIT中,命令行的比较陌生,整理下,供自己以后参考 关键的名词: 工作区:工作区 Index / Stage:暂存区 仓库:仓库区(或本地仓库) 远程控制:远程仓库 到项目目录下gi ...
- unittest(2)
测试用例执行顺序 1.setUp和tearDown相关 setUp:表示前置条件,它在每一个用例执行之前必须会执行一次 setUp可以理解为我们需要自动化测试时,需要打开网页窗口,输入对 ...