我仅仅是贴一下手写堆优化的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. TP5 分页类,自定义样式

    结合X-admin 后台框架 在做项目,为了保持分页风格的一致,所以需要自定义 一个分页类. 一.在项目的 extend 目录,创建 cus 目录 二.创建 Page 分页类,代码如下 <?ph ...

  2. Linux Eslint 命令行

    Linux 命令行 ls : 查看所有文件 ls -la : 编列文件并展示权限 sudo chmod 777 -R   文件名  : 文件权限升级 cp : 复制      cp   file_na ...

  3. ubuntu安装和使用

    1.查看ubuntu是32位还是64位 教程:jingyan.baidu.com/article/db55b609ab531f4ba30a2f13.html 2.安装maven 教程:www.linu ...

  4. WPF 列表自动换行

    原文:WPF 列表自动换行 本文告诉大家如何在 ListView 或 ListBox 使用 WrapPanel 让里面的控件自动换行 在 WPF 可以通过修改 ItemsPanel 设置使用不同的 I ...

  5. [MST] Test mobx-state-tree Models by Recording Snapshots or Patches

    Testing models is straightforward. Especially because MST provides powerful tools to track exactly h ...

  6. Android学习路线(十二)Activity生命周期——启动一个Activity

    DEMO下载地址:http://download.csdn.net/detail/sweetvvck/7728735 不像其他的编程模式那样应用是通过main()函数启动的.Android系统通过调用 ...

  7. 43.$http

    转自:https://www.cnblogs.com/best/tag/Angular/ $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据. 使用格式: // 简单的 G ...

  8. TurtleWorld Exercises

    1. Write a function called square that takes a parameter named t, which is a turtle. It should use t ...

  9. python-logging写日志编码问题

    python-logging写日志编码问题 标签(空格分隔): python 修改logging.FileHandler() 指定编码格式为:utf8 重新运行

  10. HD-ACM算法专攻系列(2)——Rightmost Digit

    题目描述: 源码: /**/ #include"iostream" using namespace std; int main() { int t, mod; long long ...