我仅仅是贴一下手写堆优化的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. DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据

    #region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回      /// <summary>      /// Dat ...

  2. CF1065D Three Pieces (多元最短路)

    题目大意:给你一个棋盘,你需要控制棋子依次经过编号为1~n的所有点,棋子的可以是车,马,象,都依照国际象棋的行棋方式,每走一步消耗1单位时间,但每次更换棋子都需要额外1单位时间,求经过所有点需要的最少 ...

  3. electron 新手教程 打包 exe

    1.安装nodejs(会自动安装npm) 2.桌面新建文件夹    your-app  (下面目录结构) your-app/ ├── package.json ├── main.js └── inde ...

  4. python_if_else,while,break

    #密码密文展示,getpass在pycharm中无法使用,只能在python中使用import getpass #登录判断'''raw_name="Monica"raw_passw ...

  5. new 对象和Class的getInstance()方法的差别?

    创建对象时的差别 1.new 对象包含2步, 1)载入类: 2)而且实例化. 2.Class的对象.getInstance(),只不过实例化. 也就是说.在运行 Class的对象.getInstanc ...

  6. PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板

    关于Php要不要使用模板一直被大家讨论,支持的说使用模板更简洁,易与前端project师交流.反对的说Php本身就支持内嵌语法,不是必需再用个模板,减少性能. 事实上使用Php的短语法.直接嵌入也不是 ...

  7. less07 important

    less .foo (@bg: #f5f5f5, @color: #900) { background: @bg; color: @color; font-size: 16px; font-weigh ...

  8. Wordpress 问题

    迁移乱码 最近在做 wordpress 迁移,数据导入到服务器后,前后台都是乱码, phpMyAdmin 里的表数据就出现了乱码. 如果您也遇到和我一样的情况,本地使用 phpMyAdmin 导出 s ...

  9. HDU 5214 Movie【贪心】

    题意:给出n,l[1],r[1],a,b,c,d 其中 l[i]=l[i-1]*a+b,r[i]=r[i-1]*c+d; 问能否从这n个区间中选出不相交不重叠的三个区间 看的题解 先考虑最左边的区间, ...

  10. plsql 中如何清除曾经登录过的用户名

    tools(工具)---> preferences(首选项) ---> login history(登录历史) ---> history(历史) ---> 把你想要删除的删除