bzoj 2662: [BeiJing wc2012]冻结【分层图+spfa】
死活想不到分层图emmm
基本想法是建立分层图,就是建k+1层原图,然后相邻两层之间把原图的边在上一层的起点与下一层的终点连起来,边权为val/2,表示免了这条边的边权,然后答案就是第0层的s到k层的t的最短路,因为0权边总是从上一层连到下一层,所以到达k层就表示走了k条0权边
然后仔细观察这张图的特性,发现不同层之间的更新只有上一层通过val/2权边更新下一层,所以考虑单层更新,每一层都做一次spfa,然后跨层的时候用上一层跑过的最短路和0权边更新下一层
然后再给spfa加一个SLF优化即可
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<ctime>
using namespace std;
const int N=50005,inf=1e9;
int n,m,k,h[N],cnt,dis[N],d[N];
bool v[N];
deque<int>q;
struct qwe
{
int ne,no,to,va;
}e[N<<2];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
inline void add(int u,int v,int w)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].no=u;
e[cnt].to=v;
e[cnt].va=w;
h[u]=cnt;
}
void spfa()
{
while(!q.empty())
{
int u=q.front();
q.pop_front();
v[u]=0;
for(int i=h[u];i;i=e[i].ne)
if(dis[e[i].to]>dis[u]+e[i].va)
{
dis[e[i].to]=dis[u]+e[i].va;
if(!v[e[i].to])
{
v[e[i].to]=1;
if(!q.empty()&&dis[q.front()]>dis[e[i].to])
q.push_front(e[i].to);
else
q.push_back(e[i].to);
}
}
}
}
int main()
{
n=read(),m=read(),k=read();
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),z=read();
add(x,y,z),add(y,x,z);
// for(int j=0;j<=k;j++)
// add(x+j*n,y+j*n,z),add(y+j*n,x+j*n,z);
// for(int j=1;j<=k;j++)
// add(x+(j-1)*n,y+j*n,0),add(y+(j-1)*n,x+j*n,0);
}
for(int i=1;i<=n;i++)
dis[i]=inf;
// clock_t st,ed;
// st=clock();
v[1]=1,dis[1]=0,q.push_back(1);
spfa();
for(int con=1;con<=k;con++)
{
for(int i=1;i<=n;i++)
d[i]=inf;
v[1]=1,dis[1]=0,q.push_back(1);
for(int i=1;i<=cnt;i++)
if(d[e[i].to]>dis[e[i].no]+e[i].va/2)
{
d[e[i].to]=dis[e[i].no]+e[i].va/2;
if(!v[e[i].to])
{
v[e[i].to]=1;
if(!q.empty()&&d[q.front()]>d[e[i].to])
q.push_front(e[i].to);
else
q.push_back(e[i].to);
}
}
for(int i=1;i<=n;i++)
dis[i]=d[i];
spfa();
}
// ed=clock();
// cerr<<st<<" "<<ed<<" "<<ed-st<<endl;
printf("%d\n",dis[n]);
return 0;
}
bzoj 2662: [BeiJing wc2012]冻结【分层图+spfa】的更多相关文章
- bzoj 2662 [BeiJing wc2012]冻结——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662 这种的都是分层图. #include<iostream> #include ...
- 【bzoj2662】[BeiJing wc2012]冻结 分层图Spfa
原文地址:http://www.cnblogs.com/GXZlegend 题目描述 “我要成为魔法少女!” “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切,封印于卡片之中„„ ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- [BZOJ] 2662: [BeiJing wc2012]冻结
https://www.lydsy.com/JudgeOnline/problem.php?id=2662 第一次写分层图(捂脸) 一开始真的naive地建图了,T到飞起.. 可以省下建图的空间,直接 ...
- BZOJ2662[BeiJing wc2012]冻结——分层图最短路
题目描述 “我要成为魔法少女!” “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切,封印于卡片之中„„” 在这个愿望被实现以后的世界里,人们享受着魔法卡片(Spe ...
- bzoj2662 [BeiJing wc2012]冻结 ——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662 分层图: 我也不知道我写的是不是 bfs (dijkstra?). 代码如下: #in ...
- [bzoj2662 BeiJing wc2012] 冻结 (分层图+最短路)
传送门 Description "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于卡片之中„„&q ...
- bzoj 2763: [JLOI2011]飞行路线【分层图+spfa】
为什么早年的题总是从0开始标号啊--又zz了一次WA 分层图的题只有这一个套路吧,建分层图,然后优化时间是分层跑spfa然后层与层之间单独跑即可 #include<iostream> #i ...
随机推荐
- 嵌入式linux启动信息完全注释
嵌入式linux启动信息完全注释 from:http://www.embedlinux.cn/ShowPost.asp?ThreadID=377 摘要 我们在这里讨论的是对嵌入式linux系统的启动过 ...
- 一种RC滤波电路的验证
在做电源的时候,在开关管的D极经常是出现不想看到的尖峰脉冲.以CCFL推挽式缓冲电路为准,我与一个同学杨进行了相应的验证. 其中的出来的现象和反思如下: 1,加上电阻和电容串联的滤波的确能将尖峰脉冲消 ...
- python之GUI图形用户界面 2014-4-7
#图形用户界面1.下载和安装wxPython2.创建并显示一个框架import wx #导入wxPythonapp=wx.App()win=wx.Frame(None)win.Show() #调用窗口 ...
- 九度oj 题目1190:大整数排序
题目1190:大整数排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4142 解决:1867 题目描述: 对N个长度最长可达到1000的数进行排序. 输入: 输入第一行为一个整数N,( ...
- <<编程之美>> -- 队列中取最大值操作的问题
不得不说编程之美是一本好书,虽然很多题目在做acm中的过程中遇到过,不过还是有很多值得思考的地方 这是今天在编程之美上看到的一个问题,对于栈转化成队列的一个思考 平时都太过依赖c++内函数库中的栈和队 ...
- 创建Django项目(一)
2013-07-24 23:20:58| 最近在学习Django项目的创建,主要的参考资料是:Djangobook 和 Django Project.这些日志用来记录自己的学习过程吧. ...
- 洛谷—— P1690 贪婪的Copy
https://www.luogu.org/problem/show?pid=1690 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地 ...
- ibatis的初识
在工作中,服务端的框架基本上是struts+spring+ibatis+velocity.ibatis曾经没有接触到,而曾经使用的hibernate在公司居然没碰着.同样都是数据库封装,为什么没有选择 ...
- Ubuntu 16.04安装qt5-default报错:qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。(此类问题终极解决方法)
切记:没事不要进行sudo apt-get upgrade 错误: qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间 ...
- Zookeeper学习 & Paxos
首先,Zookeeper是基于Paxos来进行分布式选举管理的,Paxos的内容可以参考我另一篇文章:http://www.cnblogs.com/charlesblc/p/6037004.html ...