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 最短路的更多相关文章

  1. 2019牛客多校第四场J free——分层图&&最短路

    题意 一张无向图,每条边有权值,可以选择不超过 $k$ 条路使其权值变成0,求 $S$ 到 $T$ 的最短路.(同洛谷 P4568) 分析 首先,分层图最短路可以有效解决这种带有 「阶段性」的最短路, ...

  2. 牛客多校第四场 J Free 最短路

    题意: 求最短路,但是你有k次机会可以把路径中某条边的长度变为0. 题解: 跑k+1次迪杰斯特拉,设想有k+1组dis数组和优先队列,第k组就意味着删去k条边的情况,每次松弛操作,松弛的两点i,j和距 ...

  3. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  4. 2019牛客多校第四场 A meeting

    链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  5. 2019牛客多校第四场B xor——线段树&&线性基的交

    题意 给你 $n$ 个集合,每个集合中包含一些整数.我们说一个集合表示一个整数当且仅当存在一个子集其异或和等于这个整数.现在你需要回答 $m$ 次询问 ($l, r, x$),是否 $l$ 到 $r$ ...

  6. 2019牛客多校第四场A meeting——树的直径

    题意: 一颗 $n$ 个节点的树上标有 $k$ 个点,找一点使得到 $k$ 个关键结点的最大距离最小. 分析: 问题等价于求树的直径,最小距离即为直径除2向上取整. 有两种求法,一是动态规划,对于每个 ...

  7. [2019牛客多校第四场][G. Tree]

    题目链接:https://ac.nowcoder.com/acm/contest/884/G 题目大意:给定一个树\(A\),再给出\(t\)次询问,问\(A\)中有多少连通子图与树\(B_i\)同构 ...

  8. 2019牛客多校第四场D-triples I 贪心

    D-triples 题意 给你一个\(n\),问至少有几个数或运算起来可以等于\(n\),并且输出数量和这个几个数.题目说明给的\(n\)一定符合条件(不会输出\(n= 1\) 之类不存在情况). 思 ...

  9. 2019牛客多校第四场C-sequence(单调栈+线段树)

    sequence 题目传送门 解题思路 用单调栈求出每个a[i]作为最小值的最大范围.对于每个a[i],我们都要乘以一个以a[i]为区间内最小值的对应的b的区间和s,如果a[i] > 0,则s要 ...

随机推荐

  1. PIE-SDK For C++内存栅格数据的创建

    1.功能简介 目前在地理信息领域中数据包括矢量和栅格两种数据组织形式.每一种数据有不同的数据格式,目前PIE SDK支持多种数据格式的数据创建,下面对内存栅格数据格式的数据创建功能进行介绍. 2.功能 ...

  2. JS 百度地图路书---动态路线

    JS 百度地图路书---动态路线 <!DOCTYPE html> <head> <meta http-equiv="Content-Type" con ...

  3. Codeforce 584A - Olesya and Rodion

    Olesya loves numbers consisting of n digits, and Rodion only likes numbers that are divisible by t. ...

  4. [USACO08JAN] 手机网络 - 树形dp

    经典问题系列 覆盖半径\(1\)的最小点覆盖集 \(f[i][0]\) 表示不在此处建信号塔,但\(i\)及其子树都有信号 \(f[i][1]\) 表示在此处建信号塔,但\(i\)及其子树都有信号 \ ...

  5. php环境安装问题

    1.如果图标是黄色,查看apache等服务是否全部启用:   2.如果启用了,查看80端口是否被占用->如果测试端口表明被占用->修改httpd.config文件:     1).Ctrl ...

  6. Qt中的Label和PushButton背景图自动缩放设置

    Label 背景图自动缩放 QPixmap* pixmap = new QPixmap(":/images/HeadIcon/1.png"); pixmap->scaled( ...

  7. AcWing 1013. 机器分配

    //分组背包 for物品 for体积 for 决策 #include <iostream> using namespace std; ; int n, m; int w[N][N]; in ...

  8. Linux 开启orcale服务

    su - oracle  //切换到oracle用户模式下 sqlplus /nolog  //登录sqlplus connect /as sysdba; //连接orcale startup;   ...

  9. linux 创建svn版本库,并在svn上配置checkstyle做代码风格检查

    一.创建SVN版本库 1.安装svn服务器 yum install subversion 2.查看版本 svnserve --version 3.建立SVN版本库目录(即你的SVN服务器里面的文件存放 ...

  10. javascript 循环读取数组中的值

    //数组 var a = ["#F85C6F", "#78B0F0", "#DB83ED", "#8EC656", &q ...