分层最短路(牛客第四场)-- free
题意:
给你边权,起点和终点,有k次机会把某条路变为0,问你最短路是多长。
思路:
分层最短路模板题。题目有点坑(卡掉了SPFA,只能用dijkstra跑的算法)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; const int MAXN=1e3,MAXM=5e3,MAXK=,INF=~0U>>;
int N,M,K;
int S,T; struct E{int to,next,value;} e[*MAXM*(MAXK+)+MAXK+];int ecnt,G[MAXN*(MAXK+)+];
void addEdge(int u,int v,int w){e[++ecnt]={v,G[u],w};G[u]=ecnt;} void readInt(int & x)
{
x=;
bool flag=false;
char c;
do c=getchar(); while(c!='-'&&(c<''||c>''));
if(c=='-') flag=true;
else x+=c-'';
c=getchar();
while(c>=''&&c<='')
{
x*=;
x+=c-'';
c=getchar();
}
} inline void read()
{
int i,j;
readInt(N);readInt(M);
readInt(S);readInt(T);readInt(K);
for(i=;i<=M;i++)
{
int u,v,w;
readInt(u);readInt(v);readInt(w);
for(j=;j<=K;j++)
{
addEdge(u+N*j,v+N*j,w);
addEdge(v+N*j,u+N*j,w);
if(j!=K)
{
addEdge(u+N*j,v+N*(j+),);
addEdge(v+N*j,u+N*(j+),);
}
}
}
} struct HN{int id,v;bool operator<(const HN & ot)const{return v>ot.v;}}; priority_queue<HN> heap; bool inS[MAXN*(MAXK+)+];
int dis[MAXN*(MAXK+)+]; void dijkstra(int v0)
{
int i;
for(i=;i<=N*(K+);i++) dis[i]=INF;
memset(inS,false,sizeof(inS));
dis[v0]=;
heap.push((HN){v0,});
while(!heap.empty())
{
int u=heap.top().id;heap.pop();
if(inS[u]) continue;
inS[u]=true;
for(i=G[u];i;i=e[i].next)
{
int v=e[i].to;
if(!inS[v])
if(dis[v]>dis[u]+e[i].value)
{
dis[v]=dis[u]+e[i].value;
heap.push((HN){v,dis[v]});
}
}
}
} int main()
{
//freopen("Motor.in","r",stdin);
//freopen("Motor.out","w",stdout);
int i;
read();
dijkstra(S);
int ans=INF;
for(i=;i<=K;i++) ans=min(ans,dis[T+N*i]);
printf("%d",ans);
return ;
}
分层最短路(牛客第四场)-- free的更多相关文章
- %300为0的个数(牛客第四场)-- number
题意: 给你一串数,问你如题. 思路: 我不是这样的作法,从后往前,先取00,再算%3==0的个数,往前推的时候有递推关系: #define IOS ios_base::sync_with_stdio ...
- 3的倍数 或运算构造x(牛客第四场)-- triples I
题意: 给你一个数,希望你能用最少的3的倍数或运算成它,让你输出答案. 思路: 进制%3有规律,1.2.4.8.16%3是1.2.1.2.1 ... 利用这一点分情况取一些位合成一些数就是答案了. # ...
- 笛卡尔树--牛客第四场(sequence)
思路: O(n)建一颗笛卡尔树,再O(n)dfs向上合并答案就行了. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include &l ...
- 线性基求交(线段树)--牛客第四场(xor)
题意: 给你n个基,q个询问,每个询问问你能不能 l~r 的所有基都能表示 x . 思路: 建一颗线性基的线段树,up就是求交的过程,按照线段树区间查询的方法进行check就可以了. #define ...
- 最短meeting路线(树的直径)--牛客第四场(meeting)
题意: 给你一棵树,树上有些点是有人的,问你选一个点,最短的(最远的那个人的距离)是多少. 思路: 其实就是树的直径,两遍dfs,dfs第二遍的时候遇到人就更新直径就行了,ans是/2,奇数的话+1. ...
- 牛客第三场多校 H Diff-prime Pairs
链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...
- 牛客第五场多校 J plan 思维
链接:https://www.nowcoder.com/acm/contest/143/J来源:牛客网 There are n students going to travel. And hotel ...
- 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树
目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...
- 牛客网第二场Jfarm(随机化+二维前缀和)
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 White Rabbit has a rectangular farmland of n*m. ...
随机推荐
- Killer Problem (UVA 11898 )
Problem You are given an array of N integers and Q queries. Each query is a closed interval [l, r]. ...
- DOM访问关系(父节点 子节点)
把下面的知识点掌握了,可以做一下下面的案例,都是工作中常用的,很有用 知识点 1.带Eleent和不带区别 a)带Element的获取的是元素节点 b)不带Element的获取文本 ...
- Ansible常用模块之系统类模块
cron模块 管理远程主机上的计划任务 [root@tiandong ansible]# ansible all -m cron -a "name='cron test' minute=5 ...
- python3精品解析运算符
算数运算符 +:两个对象相加 -:得到负数或者,或者一个数减去另一个数 *:两个数相乘或者是返回一个被重复若干次的字符串 /:5/2等于2.1 5//2=2(/有余数,//取整) %:取模(5%2=1 ...
- Java Date转Json报错解决方案
报错信息为: Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImp ...
- 软工团队Git现场编程实战
组员职责分工 成员 分工 鲍子涵 分配职责,整合代码 吴宜航 UI设计与实现 钟博 UI设计与实现(Main Coder) 黄海东 数据整理 王镇隆 前端api接口分析和使用(Main Coder) ...
- Angular5.0之 安装指定版本Angular CLI
我们可能会发现按照网上的方式下载安装后,使用Angular CLI生成的项目并不是我们想要的Angular的版本,因为在我们没有指定安装版本的前提下,默认会下载最新的版本安装,然而不同的Angular ...
- linux中 ls |wc -l
linux中 ls |wc -l_百度知道 答 205行,205个字,1920个字节,wc -l只输出文件行数
- C# 防火墙操作之开启与关闭
通过代码操作防火墙的方式有两种:一是代码操作修改注册表启用或关闭防火墙:二是直接操作防火墙对象来启用或关闭防火墙.不论哪一种方式,都需要使用管理员权限,所以操作前需要判断程序是否具有管理员权限. 1. ...
- stm8问题记录
sprintf 错误 现象:打印不出来数字 需要包含#include<stdio.h>