【POJ3377】Ferry Lanes 最短路
我仅仅是贴一下手写堆优化的dij模板。尽管。它。TLE了……****
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 2001000
#define inf 0x3f3f3f3f
#define longlong int
using namespace std;
struct Katarina
{
int v,next;
longlong len;
}e[N<<2];
int head[N],cnt;
void add(int u,int v,longlong len)
{
cnt++;
e[cnt].v=v;
e[cnt].len=len;
e[cnt].next=head[u];
head[u]=cnt;
}
struct Fiona
{
longlong f;
int v;
bool operator < (const Fiona &a)const
{return f<a.f;}
bool operator >= (const Fiona &a)const
{return f>=a.f;}
bool operator > (const Fiona &a)const
{return f>a.f;}
Fiona(longlong _f,int _v):f(_f),v(_v){}
Fiona(){}
};
struct Heap
{
Fiona w[N];
int cnt,crs[N];
void init(){cnt=0;memset(crs,0,sizeof(crs));}
void pushup(int &x){while((x>>1)&&w[x>>1]>w[x])swap(w[x>>1],w[x]),crs[w[x].v]=x,x>>=1;}
void pushdown(int &x)
{
while((x<<1)<=cnt)
{
int son=(x<<1==cnt)? (x<<1):(w[x<<1]<w[x<<1|1]?(x<<1):(x<<1|1));
if(w[son]>=w[x])break;
else swap(w[x],w[son]),crs[w[x].v]=x;
x=son;
}
}
void push(Fiona X)
{
if(!crs[X.v])
{
w[++cnt]=X;
pushup(crs[X.v]=cnt);
}
else
{
w[crs[X.v]]=X;
pushup(crs[X.v]);
}
}
Fiona top()/*add to a pop*/
{
Fiona ret=w[1];
crs[w[1].v]=0;
w[1]=w[cnt--];
if(cnt)pushdown(crs[w[1].v]=1);
return ret;
}
}heap;
longlong dist[N];
bool visit[N];
int n;
longlong dij(int s,int t)
{
int i,u,v,round;
heap.init();
memset(dist,0x3f,sizeof(dist));
memset(visit,0,sizeof(visit));
dist[s]=0;
heap.push(Fiona(dist[s],s));
for(round=1;round<=n;round++)
{
Fiona U=heap.top();
u=U.v;
visit[u]=1;
for(i=head[u];i;i=e[i].next)
{
v=e[i].v;
if(!visit[v]&&dist[v]>dist[u]+e[i].len)
{
dist[v]=dist[u]+e[i].len;
heap.push(Fiona(dist[v],v));
}
}
}
return dist[t];
}
int main()
{
// freopen("test.in","r",stdin);
// freopen("1.out","w",stdout);
int i,a,b,c,d;
int s,t,temp;
while(scanf("%d",&n),n)
{
n++;cnt=0;
memset(head,0,sizeof(head));
scanf("%d%d%d%d",&a,&b,&c,&d);
s=a*n+b+1;
t=c*n+d+1;
for(i=1;i<n;i++)
{
scanf("%d",&temp);
add(i,i+1,temp);
add(i+1,i,temp);
}
for(i=1;i<=n;i++)
{
scanf("%d",&temp);
add(i,i+n,temp);
add(i+n,i,temp);
}
for(i=n+1,n<<=1;i<n;i++)
{
scanf("%d",&temp);
add(i,i+1,temp);
add(i+1,i,temp);
}
cout<<dij(s,t)<<endl;
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
【POJ3377】Ferry Lanes 最短路的更多相关文章
- POJ 3377 Ferry Lanes
虽然它出现在dp专场里···但是我第一反应是一道最短路题···不过幸好它出现在dp专场里···因为我不怎么会dijstra什么的··· 题意:一条河上有N+1对码头,每个相邻码头之间需要一定时间到达, ...
- ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
//POJ3377 //DP解法-解有规律的最短路问题 //Time:1157Ms Memory:12440K #include<iostream> #include<cstring ...
- POJ 2609 Ferry Loading(双塔DP)
Ferry Loading Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1807 Accepted: 509 Sp ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
- Sicily 1031: Campus (最短路)
这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...
- 最短路(Floyd)
关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...
- bzoj1266最短路+最小割
本来写了spfa wa了 看到网上有人写Floyd过了 表示不开心 ̄へ ̄ 改成Floyd试试... 还是wa ヾ(。`Д´。)原来是建图错了(样例怎么过的) 结果T了 于是把Floyd改回spfa 还 ...
- HDU2433 BFS最短路
Travel Time Limit: 10000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
随机推荐
- iOS开发——Block使用小结
Block语法看上去好像很特别,但它实际上是作为极普通的C语言源代码处理的.Block的实质,就是Objective-C的对象. 1.Block的语法 ^ 返回值类型 参数列表 表达式 可省略返回值类 ...
- ES6 学习3 函数
1.函数默认参数 在ES5我们给函数定义参数默认值是怎么样? function action(num) { num = num || 200 //当传入num时,num为传入的值 //当没传入参数时, ...
- 【CS-4476-project 6】Deep Learning
AlexNet / VGG-F network visualized by mNeuron. Project 6: Deep LearningIntroduction to Computer Visi ...
- 栈(stack)--c实现(使用双链表)
是不是直接贴代码不太好,我竟然不知道说什么. 写这个考虑的问题,或者是纠结的问题是这个头指针怎么处理,也就是栈的顶部,最后采用的是初始化第一个栈空间浪费掉,栈顶是有元素的.好像应该去学习下画图,没图不 ...
- Windows下安装Linux虚拟机的用途和好处
Windows一般是办公界面,主要做代码编辑查看,资料查找,还有发邮件,也可以用Windows下的其他的有用软件,Linux主要作为编译工具,基本上开发都是在Linux平台下编译,例如编译驱动就需要在 ...
- jquery-ui日期时间控件实现
日期控件和时间控件为独立控件,日期时间控件要同一时候导入日期控件和时间控件的js,然后在日期控件加入时间控件显示參数,没有导入时间控件js.日期控件函数设置的时间控件參将包错 日期控件官网网址:htt ...
- 怎么样才算是精通 C++?
C++是一门非常奇妙的语言.让人又爱又恨. 在知乎上看到的一个帖子.怎么样才算是精通C++,这里节选一些精彩的回复. 链接:http://www.zhihu.com/question/20201972 ...
- ftoa浮点型转换成字符串
#include <stdio.h> bool ftos(float num,char *s,int n) { int temp; float t=num; int pn=0; b ...
- Centos7+httpd+fastcgi+rails安装
搭建的环境: centos7 Apache/2.4.6 fastcgi2.4.6 rails4 在安装fastcgi的时候遇到了问题: 问题: .... .. In file included fro ...
- js html 事件冒泡
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...