题意:

  板题。。。建个图。。跑一遍spfa就好了。。。嘻嘻。。。

注意。。数组大小就好啦。。400 * 400 = 1600 我也是抑郁了。。沙雕的我。。

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <cctype>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <bitset>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define rd(a) scanf("%d", &a)
#define rlld(a) scanf("%lld", &a)
#define rc(a) scanf("%c", &a)
#define rs(a) scanf("%s", a)
#define pd(a) printf("%d\n", a);
#define plld(a) printf("%lld\n", a);
#define pc(a) printf("%c\n", a);
#define ps(a) printf("%s\n", a);
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = 1e6 + , INF = 0x7fffffff, LL_INF = 0x7fffffffffffffff;
int n, s, t;
int head[maxn], d[maxn], vis[maxn];
int cnt; struct node
{
int u, v, w, next;
}Node[maxn << ]; void add_(int u, int v, int w)
{
Node[cnt].u = u;
Node[cnt].v = v;
Node[cnt].w = w;
Node[cnt].next = head[u];
head[u] = cnt++;
} void add(int u, int v, int w)
{
add_(u, v, w);
add_(v, u, w); } void spfa()
{
queue<int> Q;
for(int i = ; i < maxn; i++) d[i] = INF;
mem(vis, );
Q.push(s);
vis[s] = ;
d[s] = ;
while(!Q.empty())
{
int u = Q.front(); Q.pop();
vis[u] = ;
for(int i = head[u]; i != -; i = Node[i].next)
{
node e = Node[i];
if(d[e.v] > d[u] + e.w)
{
d[e.v] = d[u] + e.w;
if(!vis[e.v])
{
vis[e.v] = ;
Q.push(e.v);
}
}
}
}
} void init()
{
mem(head, -);
cnt = ;
} int main()
{
int T, w;
rd(T);
while(T--)
{
init();
rd(n);
s = , t = n * n + ;
for(int i = ; i < n; i++)
for(int j = ; j <= n; j++)
{
rd(w);
if(i == )
{
if(j == )
add(s, i * (n - ) + j, w), add(i * (n - ) + j, t, w);
else if(j == n)
add(i * (n - ) + (j - ), t, w);
else
add(i * (n - ) + j, i * (n - ) + (j - ), w), add(i * (n - ) + j, t, w);
}
else if(i == n - )
{
if(j < n)
add(s, (i - ) * (n - ) + j, w);
}
else
{
if(j == )
add(s, i * (n - ) + j, w), add(i * (n - ) + j, (i - ) * (n - ) + j, w);
else if(j == n)
add(i * (n - ) + (j - ), t, w);
else
add(i * (n - ) + j, i * (n - ) + (j - ), w), add(i * (n - ) + j, (i - ) * (n - ) + j, w);
}
}
spfa();
printf("%d\n", d[t]);
} return ;
}

最新文章

  1. 利用Microsoft.Practices.Unity的拦截技术,实现.NET中的AOP
  2. [HTML/HTML5]5 使用链接
  3. MySQL中MyISAM和InnoDB的区别
  4. Asp.net 加密解密类
  5. 【特别推荐】10款唯美浪漫的婚礼 &amp; 结婚纪念网站模板
  6. 用eclipse导入jar包并使其在一个文件夹下
  7. OpenCV加载图像并显示
  8. iOS 推送证书生成pem
  9. 常见S1信令交互流程
  10. 200. Number of Islands
  11. fg bg 等命令
  12. UVALive 4957 Fake scoreboard
  13. Quartz入门案例与介绍(与spring整合)
  14. 使用Gulp构建前端自动化方案
  15. Synchronized和Lock的区别
  16. 使用Visual Studio Team Services敏捷规划和项目组合管理(七)——流程定制
  17. 【转】Android动态破解微信本地数据库(EnMicroMsg.db)
  18. LOJ #2541「PKUWC2018」猎人杀
  19. javaweb开发.eclipse使用小常识
  20. [北航矩阵理论A]课程笔记

热门文章

  1. Linux命令(一)
  2. Can’t connect to local MySQL server through socket 原因解析
  3. java高精度学习笔记
  4. Average Sleep Time CodeForces - 808B (前缀和)
  5. alibaba druid
  6. WCF上传下载文件
  7. C#设计模式之3:观察者模式
  8. [转帖]Ipvsadm参数详解(常用命令)
  9. [转帖] BMC安全隐患
  10. NIO服务器与客户端