博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ] 2662: [BeiJing wc2012]冻结
阅读量:5961 次
发布时间:2019-06-19

本文共 1537 字,大约阅读时间需要 5 分钟。

第一次写分层图(捂脸)

一开始真的naive地建图了,T到飞起..

可以省下建图的空间,直接在dis数组上拓展一维,同时维护点的编号和高度。

#include
#include
#include
#include
using namespace std;inline int rd(){ int ret=0,f=1;char c; while(c=getchar(),!isdigit(c))f=c=='-'?-1:1; while(isdigit(c))ret=ret*10+c-'0',c=getchar(); return ret*f;}const int MAXN=2048*4;struct Edge{ int next,to,w;}e[1000000];int ecnt,head[MAXN];inline void add(int x,int y,int w){ e[++ecnt].next = head[x]; e[ecnt].to = y; e[ecnt].w = w; head[x] = ecnt;}int n,m,num;queue
Q,Qk;int dis[MAXN][64],inq[MAXN][64];void spfa(){ memset(dis,0x3f,sizeof(dis)); Q.push(1);Qk.push(0);dis[1][0]=0;inq[1][0]=1; while(!Q.empty()){ int top=Q.front();Q.pop();int tmp=Qk.front();Qk.pop(); inq[top][tmp]=0; for(int i=head[top];i;i=e[i].next){ int v=e[i].to; if(dis[v][tmp]>dis[top][tmp]+e[i].w){ dis[v][tmp]=dis[top][tmp]+e[i].w; if(!inq[v][tmp]) Q.push(v),Qk.push(tmp),inq[v][tmp]=1; } if(tmp
dis[top][tmp]+(e[i].w>>1)){ dis[v][tmp+1]=dis[top][tmp]+(e[i].w>>1); if(!inq[v][tmp+1]) Q.push(v),Qk.push(tmp+1),inq[v][tmp+1]=1; } } }}int main(){ n=rd();m=rd();num=rd(); int x,y,w; for(int i=1;i<=m;i++){ x=rd();y=rd();w=rd(); add(x,y,w);add(y,x,w); } spfa(); int ans=1<<30; for(int i=0;i<=num;i++)ans=min(ans,dis[n][i]); cout<

 

转载于:https://www.cnblogs.com/ghostcai/p/9369696.html

你可能感兴趣的文章
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
深入理解Java的接口和抽象类
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>