Catch the Theves HDU - 3870(s - t平面图最小割)
题意:
板题。。。建个图。。跑一遍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 ;
}
Catch the Theves HDU - 3870(s - t平面图最小割)的更多相关文章
- hdu3870-Catch the Theves(平面图最小割)
Problem Description A group of thieves is approaching a museum in the country of zjsxzy,now they are ...
- tyvj P1209 - 拦截导弹 平面图最小割&&模型转化
P1209 - 拦截导弹 From admin Normal (OI)总时限:6s 内存限制:128MB 代码长度限制:64KB 背景 Background 实中编程者联盟为了培养技 ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij
B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...
- 【平面图最小割】BZOJ1001- [BeiJing2006]狼抓兔子
[题目大意]左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) ...
- 【平面图最小割】BZOJ2007-[NOI2010]海拔
[题目大意] 城市被东西向和南北向的主干道划分为n×n个区域,包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向道路.现得到了每天每条道路两个方向的人流量.每一个交叉路口都有海拔,每向上爬h ...
- BZOJ 2007 海拔(平面图最小割转对偶图最短路)
首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
- 【BZOJ1001】狼抓兔子(平面图最小割转最短路)
题意:有一张平面图,求它的最小割.N,M.表示网格的大小,N,M均小于等于1000. 左上角点为(1,1),右下角点为(N,M).有以下三种类型的道路 1:(x,y)<==>(x+1,y ...
随机推荐
- python-Requests + 正则表达式爬取猫眼电影
github: https://github.com/LXL-YAN/Requests_Regular-Expressions-Crawl-CatEye-Movies
- python_内置函数1_42
内置函数 内置函数大全: Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() ...
- H5 字符实体
41-字符实体 (greater than) © 版权符号 --> 我 爱你 到此为止我们的HTML的基础标签就学习完毕了, 例如我们学习了<h1>标签, <table&g ...
- 工作时间看股票:采用Excel RTD技术获取和讯网的实时股票行情及深沪港最新指数
本文地址:http://www.cnblogs.com/Charltsing/p/RTD.html QQ:564955427 在Excel里面获取实时数据大概有几种方式:1.定时器+函数2.DDE3. ...
- Open Live Writer安装教程
配置步骤: 1.在菜单中选择"工具">"帐户",出现下面的画面: 2.点击"添加按钮",在出现的窗口中选择"其他日志服务&q ...
- 使用队列queue实现一个简单的生产者消费者模型
一.生产者消费者模型 我们去超市商店等地购买商品时,我们大部分人都会说自己是消费者,而超市的各大供货商.工厂等,自然而然地也就成了我们的生产者.如此一来,生产者有了,消费者也有了,那么将二者联系起来的 ...
- Individual Project
这次我自己完成了一个小小的项目,课可以把这篇随笔当做一次实验报告,主要的内容是用JUnit进行单元测试.由于我的技术太弱了,就在博客园里“求师”,按照大神的方法慢慢把这些东西写了下啦来. 不知道怎么搞 ...
- 【kindle笔记】读书记录-总
注:谨以此贴记录各种读书心得的目录.包括纸质书和电子书等等. 我的啃豆 说起来,买啃豆的初心是<鸟哥私房菜> 来自亚马逊中国官网,于公元2017年,在双十一与双十二中间,一千大洋购得 有了 ...
- CodeForces Round #548 Div2
http://codeforces.com/contest/1139 A. Even Substrings You are given a string s=s1s2…sns=s1s2…sn of l ...
- JEECG 3.7 Memory Leak
JEECG 3.7 版本常见问题贴 - JEECG官方网站-企业级JAVA快速开发平台 - Powered by Discuz!http://www.jeecg.org/forum.php?mod=v ...