题目链接:https://ac.nowcoder.com/acm/contest/884/J

题意:给定一个无向图,有n个点,m条边(n,m<=1e3),起点S、终点T,在可以将k条边的权值变为0的条件下求S到T的最短路。

思路:这种题目要将原图分为k+1层,第i层表示将i条边的权值变为0,在这个图上dijkstra,答案为min(dis[T+i*m])(0<=i<=k)。

AC代码:

#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; struct node{
int v,w,nex;
}edge[*]; int n,m,S,T,k,cnt,ans=0x3f3f3f3f;
int head[*],dis[*]; void adde(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].w=w;
edge[cnt].nex=head[u];
head[u]=cnt;
} struct node2{
int idx,val;
node2(){}
node2(int i,int v){
idx=i,val=v;
}
}; bool operator<(node2 a,node2 b){
return a.val>b.val;
} void dijkstra(){
for(int i=;i<=n*(k+);++i)
dis[i]=0x3f3f3f3f;
dis[S]=;
priority_queue<node2> que;
que.push(node2(S,));
while(!que.empty()){
node2 now=que.top();
que.pop();
int x=now.idx,y=now.val;
for(int i=head[x];i;i=edge[i].nex){
int v=edge[i].v;
if(dis[v]>y+edge[i].w){
dis[v]=y+edge[i].w;
que.push(node2(v,dis[v]));
}
}
}
} int main(){
scanf("%d%d%d%d%d",&n,&m,&S,&T,&k);
for(int i=;i<=m;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
for(int j=;j<k;++j){
adde(u+j*m,v+j*m,w);
adde(v+j*m,u+j*m,w);
adde(u+j*m,v+(j+)*m,);
adde(v+j*m,u+(j+)*m,);
}
adde(u+k*m,v+k*m,w);
adde(v+k*m,u+k*m,w);
}
dijkstra();
for(int i=;i<=k;++i)
if(dis[T+i*m]<ans)
ans=dis[T+i*m];
printf("%d\n",ans);
return ;
}

2019牛客暑期多校训练营(第四场)- J free的更多相关文章

  1. 2019牛客暑期多校训练营(第六场)J Upgrading Technology

    传送门 题意: 就是给你n个技能,每个技能最高升到m级,每升一级就是耗费Cij钱,这个Cij可能是负的,如果所有技能都升到或者说超过j等级,就会获得Dj钱,这个Dj也有可能是负值,让你求你最多得到多少 ...

  2. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  3. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  4. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  5. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  6. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  7. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  8. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 2019牛客暑期多校训练营(第二场)J-Subarray(思维)

    >传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...

  10. 2019牛客暑期多校训练营(第一场)-A (单调栈)

    题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...

随机推荐

  1. Monkey实战测试步骤

    1,adb devices 确保设备在线 2,adb shell pm list packages 查看包名 3,adb shell monkey -p com.xzck.wangcai   --ig ...

  2. POJ1961 Period && POJ2604 Power Strings 字符串循环节

    两道题都是求循环节的...但是一道是学哈希时做的,另一道是学$KMP$时做的 POJ2604 用的哈希...枚举长度的因数作为循环节的长度,然后暴力算出所有循环节位置的哈希值,看看是否相等. #inc ...

  3. Window Service安装不成功

    1. 加Winsow Service 2. 加Setup Project    Add -> Project Output , 选中Primary output from Winsow Serv ...

  4. Java面向对象5(V~Z)

    计算各种图形的周长(接口与多态)(SDUT 3338) import java.util.Scanner; public class Main { public static void main(St ...

  5. Mac Appium环境搭建

    安装brew ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" 安装java brew install ...

  6. 浅谈C++运算符重载

    首先,什么是运算符重载? C++里运算符重载主要有两种方法.一是通过类的成员函数进行重载,二是通过类的友元函数进行重载. 下面以简单的复数类complex为例: 下面是通过类的成员函数进行运算符的重载 ...

  7. Linux常用目录及目录作用说明

    Linux目录结构 /:根目录 /boot:存放系统启动相关文件 /etc:存放系统配置文件 /dev:存放系统设备文件(如/dev/sda) /run:存放系统运行相关文件 /bin:存放系统命令 ...

  8. python获取最大值

    python2 中获取int最大值 import sys print sys.maxint 但是在python3中,报错: AttributeError: module 'sys' has no at ...

  9. mysql 查询相关命令

    1. 结果集按列展示 mysql  -u用户名  -p密码  -D 数据库名 -e  sql语句 示例:mysql   -uroot  -p123456  -D mysql -e select * f ...

  10. JS基础_call和apply

    call()和apply() - 这两个方法都是函数对象的方法,需要通过函数对象来调用 - 当对函数调用call()和apply()都会调用函数执行 - 在调用call和apply可以将一个对象指定为 ...