我仅仅是贴一下手写堆优化的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 最短路的更多相关文章

  1. POJ 3377 Ferry Lanes

    虽然它出现在dp专场里···但是我第一反应是一道最短路题···不过幸好它出现在dp专场里···因为我不怎么会dijstra什么的··· 题意:一条河上有N+1对码头,每个相邻码头之间需要一定时间到达, ...

  2. ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)

    //POJ3377 //DP解法-解有规律的最短路问题 //Time:1157Ms Memory:12440K #include<iostream> #include<cstring ...

  3. POJ 2609 Ferry Loading(双塔DP)

    Ferry Loading Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1807   Accepted: 509   Sp ...

  4. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  5. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

  6. Sicily 1031: Campus (最短路)

    这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...

  7. 最短路(Floyd)

    关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...

  8. bzoj1266最短路+最小割

    本来写了spfa wa了 看到网上有人写Floyd过了 表示不开心 ̄へ ̄ 改成Floyd试试... 还是wa ヾ(。`Д´。)原来是建图错了(样例怎么过的) 结果T了 于是把Floyd改回spfa 还 ...

  9. HDU2433 BFS最短路

    Travel Time Limit: 10000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

随机推荐

  1. vue生命周期-学习心得

    每个Vue实例在被创建之前都要经过一系列的初始化过程,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.销毁等一系列过程,这个过程就是vue的生命周期. 1 vue生命周期图 {: ...

  2. mybatis中 #跟$的区别

    #相当于对数据 加上 双引号,$相当于直接显示数据 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...

  3. 【Python】包管理工具pip

    一.pip的安装 1. 将"D:\Python27\"  和 "D:\Python27\Scripts"设置到环境变量当中 2. 安装setup tools 将 ...

  4. java流与文件的操作 文件加密

    课后作业 1,源代码 import java.io.*; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttribu ...

  5. [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)

    P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...

  6. Qt之QFileIconProvider

    简述 QFileIconProvider类为QDirModel和QFileSystemModel类提供了文件图标. 简述 共有类型 公共函数 示例 IconType 效果 源码 QFileInfo 效 ...

  7. android:为TextView加入样式——下划线,颜色,设置链接样式及前背景色

    实现下划线及颜色设置: public class AtActivity extends Activity { LinearLayout ll;     /** Called when the acti ...

  8. 漫谈linux之文件IO篇(SSD写性能和机械硬盘差不多,读是4到10倍)

    前同事的文章,觉得写得很清晰,收藏了. http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术 ...

  9. django 笔记17 ModelForm

    Model 数据库操作 验证 验证 Form -class LoginForm(Form): email = fields.EmailField() is_valid 每一个字段进行正则(字段内置正则 ...

  10. [GDKOI2010] 圈地计划(网络流)

    题2链接:https://www.luogu.org/problemnew/show/P1935 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots ...