分层最短路(牛客第四场)-- 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. ...
随机推荐
- 重启php7.0-fpm
/etc/init.d/php7.0-fpm restart
- bootstrap面板的使用
<div class="panel panel-primary"> <div class="panel-heading"> 头部 < ...
- Java线程之Timer
简述 java.util.Timer是一个定时器,用来调度线程在某个时间执行.在初始化Timer时,开启一个线程循环提取TaskQueue任务数组中的任务, 如果任务数组为空,线程等待直到添加任务: ...
- liunx 一些文件下载上传的命令
xshell 上传 rz sftp 语法: put path/filename.txt Put -r path/文件夹 或者 put “path/filename.txt” Put -r “path/ ...
- Inter IPP & Opencv 在centos 环境下使用GCC命令行编译c++运行
Inter IPP & Opencv 的安装看这里:https://www.cnblogs.com/dzzy/p/11332907.html 考虑到服务器一般没有桌面环境,不能用IDE编译,直 ...
- springboot @Configuration配置类里面使用@Value获取不到.yml配置文件属性的值
之前一个项目里面分为很多子工程的那种结构,要求让我改成一个项目的结构.我这边手动将代码合并之后出现下面的这种问题,然后尝试进行用各种方式解决 Error creating bean with name ...
- Java中的基本数据类型和引用类型
一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...
- OUC_Summer Training_ DIV2_#9 719
其实自己只会做很简单的题,有时都不想写解题报告,觉得不值得一写,但是又想到今后也许就不会做ACM了,能留下来的东西只有解题报告了,所以要好好写,很渣的题也要写,是今后的纪念. B - B Time L ...
- nginx目录及配置语法
一.Nginx安装目录 1.查看安装目录. 采用yum的方式安装,其实都是安装的一个一个的 pm 包,故可采用如下命令查看 rpm -ql nginx 遵循了 rpm 包管理规范. 2.安装目录详解 ...
- Oracle 12C 物理Standby 主备切换switchover
Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...