从点(n,1)到点(1,m)的最短路径,可以转换地图成从(1,1)到(n,m)的最短路,因为有负权回路,所以要用spfa来判负环,

注意一下如果负环把终点包围在内的话, 如果用负环的话会输出无穷,但是有答案的,所以从终点出去的点不要,还有就是负环习惯用-1判断,但是可能会有负值,所以要用-inf

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x)) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = ;
const int maxm = ;
const int mod = 1e9+;
using namespace std; int n, m;
int T, tol;
struct Node {
int u, v, w, next;
bool operator < (Node a) const {
return w > a.w;
}
};
Node node[maxm];
int cnt[maxn];
int dis[maxn];
bool vis[maxn];
int head[maxn];
int maps[][]; void init() {
tol = ;
memset(cnt, , sizeof cnt);
memset(vis, , sizeof vis);
memset(dis, inf, sizeof dis);
memset(maps, , sizeof maps);
memset(head, -, sizeof head);
} int getnum(int i, int j) {
return (i-)*m + j;
} void addnode(int u, int v, int w) {
node[tol].u = u;
node[tol].v = v;
node[tol].w = w;
node[tol].next = head[u];
head[u] = tol++;
} int spfa(int st, int ed) {
int all = ed;
queue<int> q;
vis[st] = true;
dis[st] = ;
cnt[st]++;
q.push(st);
while(!q.empty()) {
int u = q.front();
q.pop();
vis[u] = false;
if(u==ed)
continue;
for(int i=head[u]; ~i; i=node[i].next) {
int v = node[i].v;
int w = node[i].w;
if(dis[v] > dis[u] + w) {
dis[v] = dis[u] + w;
if(!vis[v]) {
vis[v] = true;
cnt[v]++;
if(cnt[v] >= all) return -inf;
q.push(v);
}
}
}
}
return dis[ed];
} int main() {
while(scanf("%d%d", &m, &n), n||m) {
init();
int q;
scanf("%d", &q);
int x, y;
while(q--) {
scanf("%d%d", &x, &y);
x++, y++;
maps[y][x] = ;
}
scanf("%d", &q);
int x2, y2, t;
while(q--) {
scanf("%d%d%d%d%d", &x, &y, &x2, &y2, &t);
x++, y++;
x2++, y2++;
maps[y][x] = ; addnode(getnum(y, x), getnum(y2, x2), t);
}
// for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) printf("%d%c", maps[i][j], j==m ? '\n' : ' ');
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
if(i == n && j == m) continue;
if(maps[i][j] == ) {
if(i- >= && maps[i-][j] != )
addnode(getnum(i, j), getnum(i-, j), );
if(j- >= && maps[i][j-] != )
addnode(getnum(i, j), getnum(i, j-), );
if(i+ <= n && maps[i+][j] != )
addnode(getnum(i, j), getnum(i+, j), );
if(j+ <= m && maps[i][j+] != )
addnode(getnum(i, j), getnum(i, j+), );
} }
}
int ans = spfa(getnum(, ), getnum(n, m));
if(ans == -inf) printf("Never\n");
else if(ans == inf) printf("Impossible\n");
else printf("%d\n", ans);
}
return ;
}

Haunted Graveyard ZOJ - 3391(SPFA)的更多相关文章

  1. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)

    3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...

  2. 最短路(SPFA)

    SPFA是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 主要思想是: 初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将 ...

  3. Bellman-Ford算法及其队列优化(SPFA)

    一.算法概述 Bellman-Ford算法解决的是一般情况下的单源最短路径问题.所谓单源最短路径问题:给定一个图G=(V,E),我们希望找到从给定源结点s属于V到每个结点v属于V的最短路径.单源最短路 ...

  4. I - Beautiful People ZOJ - 2319 (二分法)

    The most prestigious sports club in one city has exactly N members. Each of its members is strong an ...

  5. sgu 240 Runaway (spfa)

    题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...

  6. codevs 1021 玛丽卡(spfa)

    题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...

  7. 【POJ】1062 昂贵的聘礼(spfa)

    http://poj.org/problem?id=1062 此题一开始果断想到暴力.. 但是n<=100果断不行. 一看题解,噗!最短路... 构图很巧妙. 每一个物品对应的所需物品相当于一个 ...

  8. POJ1860Currency Exchange(SPFA)

    http://poj.org/problem?id=1860 题意:  题目中主要是说存在货币兑换点,然后现在手里有一种货币,要各种换来换去,最后再换回去的时候看能不能使原本的钱数增多,每一种货币都有 ...

  9. 【NOIP 2013 DAY2 T3】 华容道(spfa)

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

随机推荐

  1. vue上传图片

    在用这块代码前需要在主页面index引入<script src="http://at.alicdn.com/t/font_kfbh2nlnqrrudi.js">< ...

  2. 缓存session,cookie,sessionStorage,localStorage的区别

    https://www.cnblogs.com/cencenyue/p/7604651.html(copy) 浅谈session,cookie,sessionStorage,localStorage的 ...

  3. w3c JS测试

    到W3c的js测试里面溜达了一圈: 做错了几道题: 外部脚本必须包含<script>标签吗? 否!! 这里的外部脚本是指xx.js这个文件,在文件中写js代码是不需要包含script标签的 ...

  4. eclipse 部署项目

  5. Django--ORM和单表查询

    一 . ORM ORM是“对象-关系-映射”的简称.(Object Relational Mapping,简称ORM) 二. 单表操作 要想将模型转为mysql数据库中的表,需要在setting里面写 ...

  6. python之路--面向对象-成员

    一 . 成员 在类中你能写的所有内容都是类的成员 class 类名: # 方法 def__init__(self, 参数1, 参数2...): # 属性变量 self.属性1 = 参数1 self.属 ...

  7. Python图形用户界面

    1.使用Tkinter创建图形用户界面的步骤 (1)导入Tkinter模块,使用import Tkinter或from Tkinter import * (2)创建顶层窗口对象容器,使用top = T ...

  8. Delphi处理数据网格DBGrid的编辑框 获取还没有提交到数据集的字段文本

    //fromhttp://kingron.myetang.com/zsfunc12.htm (*//标题:处理数据网格的编辑框说明:示例添加焦点颜色;获取还没有提交到数据集的字段文本设计:Zswang ...

  9. jquery获取select选择的文本与值

    jquery获取select选择的文本与值获取select :获取select 选中的 text :    $("#ddlregtype").find("option:s ...

  10. ES 6 系列 - Module 的语法

    es 6 大幅度优化了模块化编程的规范. 写在前面:在 es6 之前,说起 js 的模块化,一般都避不开 CommonJs 和 AMD 两种方案.这两种方案,前者应用于服务器,后者应用于浏览器.而 e ...