题意: n岛m条路,然后是 n个岛的坐标,然后是m条双向路,包括 岛和 岛 之间 最大客流量,让求 最左边的岛 到右边的岛 最大客流量

分析: 建图 以 左边的岛为原点,最右边的为终点求最大客流量。

刘汝佳STL会超时,因为vector牵扯到 复制操作

然后看大神的将stl全换了http://www.cnblogs.com/xiao-xin/articles/4452306.html

 #include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int INF = 0x3f3f3f3f;
const int Max = + ;
struct Edge
{
int to, flow, Next;
};
struct Dinic
{
int n, s, t, now;
Edge edges[Max * ];
bool vis[Max];
int d[Max], head[Max], q[Max];
void init(int _s, int _t, int _n)
{
s = _s; t = _t; n = _n;
memset(head, -, sizeof(head));
now = ;
}
void addEdge(int from, int to, int flow)
{
edges[now].to = to; edges[now].flow = flow;
edges[now].Next = head[from]; head[from] = now++; edges[now].to = from; edges[now].flow = flow;
edges[now].Next = head[to]; head[to] = now++;
}
bool BFS()
{
memset(vis, , sizeof(vis));
int Front =, rear = ;
q[rear++] = s;
d[s] = ;
vis[s] = ;
while (Front < rear)
{
int x = q[Front++];
for (int i = head[x]; i != -; i = edges[i].Next)
{
if ( vis[edges[i].to] == && edges[i].flow > )
{
vis[edges[i].to] = ;
d[ edges[i].to ] = d[x] + ;
q[ rear++ ] = edges[i].to;
}
}
}
return vis[t];
}
int DFS(int x, int a)
{
if (x == t || a == )
return a;
int flow = , f;
for (int i = head[x]; i != -; i = edges[i].Next)
{
if (d[x] + == d[edges[i].to] && edges[i].flow > )
{
f = DFS(edges[i].to, min(a - flow, edges[i].flow));
edges[i].flow -= f;
edges[i ^ ].flow += f;
flow += f;
if (flow == a)
return flow;
}
}
if (flow == )
d[x] = ;
return flow;
}
int MaxFlow()
{
int flow = ;
while ( BFS() )
{
flow += DFS(s, INF);
}
return flow;
} }g;
/*
struct Dinic
{
int n, s, t;
vector<Edge> edges;
vector<int> G[Max];
bool vis[Max];
int d[Max];
int cur[Max];
void init(int _n, int _s, int _t)
{
n = _n;
s = _s;
t = _t;
edges.clear();
for (int i = 0; i <= n; i++)
G[i].clear();
}
void addEdge(int from, int to, int cap)
{
Edge edge;
edge.from = from;
edge.to = to;
edge.cap = cap;
edge.flow = 0;
edges.push_back(edge);
edge.from = to;
edge.to = from;
edge.cap = cap;
edge.flow = 0;
edges.push_back(edge);
int m = (int) edges.size();
G[from].push_back(m - 2);
G[to].push_back(m - 1);
}
bool BFS()
{
memset(vis, 0, sizeof(vis));
queue<int> Q;
Q.push(s);
d[s] = 0;
vis[s] = 1;
while (!Q.empty())
{
int x = Q.front();
Q.pop();
for (int i = 0; i < (int) G[x].size(); i++)
{
Edge & e = edges[ G[x][i] ];
if (!vis[e.to] && e.cap > e.flow)
{
vis[e.to] = 1;
d[e.to] = d[x] + 1;
Q.push(e.to);
}
}
}
return vis[t];
}
int DFS(int x, int a)
{
if (x == t || a == 0)
return a;
int flow = 0, f;
for (int& i = cur[x]; i < (int)G[x].size(); i++)
{
Edge & e = edges[ G[x][i] ];
if (d[x] + 1 == d[e.to] && (f = DFS(e.to, min(a, e.cap - e.flow))) > 0)
{
e.flow += f;
edges[G[x][i] ^ 1].flow -= f;
flow += f;
a -= f;
if (a == 0)
break;
}
}
return flow;
}
int MaxFlow()
{
int flow = 0;
while( BFS() )
{
memset(cur, 0, sizeof(cur));
flow += DFS(s, INF);
}
return flow;
} }g;
*/
int main()
{
int T, n, m, east, west;
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &n, &m);
int maxx = -INF, minx = INF;
int x, y, w;
for (int i = ; i <= n; i++)
{
scanf("%d%d", &x, &y);
if (x > maxx)
{
maxx = x;
west = i;
}
if (x < minx)
{
minx = x;
east = i;
}
}
g.init(east, west, n);
for (int i = ; i <= m; i++)
{
scanf("%d%d%d", &x, &y, &w);
g.addEdge(x, y, w);
}
printf("%d\n", g.MaxFlow());
}
return ;
}

HDU 4280Island Transport(Dinc非STL 模板)的更多相关文章

  1. HDU 4280Island Transport(网络流之最大流)

    题目地址:pid=4280">http://acm.hdu.edu.cn/showproblem.php? pid=4280 这个题是一个纯最大流模板题..就是用来卡时间的.. 还好我 ...

  2. C++非类型模板参数

    对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数.在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定.但是在这里,我们面对的是这 ...

  3. 泛型编程、STL的概念、STL模板思想及其六大组件的关系,以及泛型编程(GP)、STL、面向对象编程(OOP)、C++之间的关系

    2013-08-11 10:46:39 介绍STL模板的书,有两本比较经典: 一本是<Generic Programming and the STL>,中文翻译为<泛型编程与STL& ...

  4. 标准非STL容器 : bitset

    1. 概念 什么是"标准非STL容器"?标准非STL容器是指"可以认为它们是容器,但是他们并不满足STL容器的所有要求".前文提到的容器适配器stack.que ...

  5. C++ Template之非类型模板参数

    非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...

  6. DLL中导出STL模板类的问题

    接上一篇. 上一篇的dll在编译过程中一直有一个警告warning C4251: ‘CLASS_TEST::m_structs’ : class ‘std::vector<_Ty>’ ne ...

  7. C++标准库函数 end 的实现原理(非类型模板参数)

    在刚开始学习<C++ Primer>的时候遇到了 end 函数,感觉很神奇,但又很迷惑:为什么能获得数组的尾后指针呢?编译器也不会在内存中申请一块空间放数组元素的个数啊!最近再一次遇到了 ...

  8. 队列问题非STL解决方案

    队列问题非STL解决方案 常年使用STL解决队列问题,以至于严重生疏队列的根本原理... 直到今日 被老师被迫 使用算法原理解决问题,方才意识到我对队列一窍不通... ...直到 经过一系列的坑蒙拐骗 ...

  9. c++11-17 模板核心知识(三)—— 非类型模板参数 Nontype Template Parameters

    类模板的非类型模板参数 函数模板的非类型模板参数 限制 使用auto推断非类型模板参数 模板参数不一定非得是类型,它们还可以是普通的数值.我们仍然使用前面文章的Stack的例子. 类模板的非类型模板参 ...

随机推荐

  1. Nginx+Varnish 实现动静分离,为服务器分流,降低服务器负载

    相必大家在看加快网站响应速度方面的文章时,都提过这么一条:动静分离.那怎样实现动静分离呢,这里笔者就亲自搭建相关服务实现动静分离. 动静分离是一种架构,就是把静态文件,比如JS.CSS.图片甚至有些静 ...

  2. TextBoxFor控件的扩展---Bootstrap在mvc上的应用

    TextBoxFor控件的问题: 1:自带了样式,再用bootstrap样式会有冲突. 2:要加水印,js事件,限制输入长度比较麻烦. 因此需要对textboxfor控件进行扩展. 目标: 1:能使用 ...

  3. nios II--实验3——led 100M软件部分

    软件开发 参照实验二(led),该实验与实验二(led)的不同之处在于系统的时钟由50M提成为100M.运行结果,在调试窗口输出Hello from Nios II!,并且板上的四个LED灯流动显示, ...

  4. BPR: Bayesian Personalized Ranking from Implicit Feedback-CoRR 2012——20160421

    1.Information publication:CoRR 2012 2.What 商品推荐中常用的方法矩阵因子分解(MF),协同过滤(KNN)只考虑了用户购买的商品,文章提出利用购买与未购买的偏序 ...

  5. ContentProvider备份短信,以xml文件存储

    因为短信的内容已经通过ContentProvider暴露出来,所以我们可以直接用内容解析者获取短信内容. 想要获取短信内容,你需要知道的一些东西: 1.Uri uri = Uri.parse(&quo ...

  6. JPA和hibernate的关系

    实际上,JPA的标准的定制是hibernate作者参与定制的,所以JPA是hibernate的一个总成,可以这么理解

  7. SpringMVC使用@PathVariable,@RequestBody,@ResponseBody,@RequestParam,@InitBinder

    @Pathvariable public ResponseEntity<String> ordersBack(           @PathVariable String reqKey, ...

  8. 使用 Spring 3 来创建 RESTful Web Services

    来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...

  9. Java--剑指offer(8)

    36.输入两个链表,找出它们的第一个公共结点. 解题思路:这里主要是把两个链表的节点都放入两个栈中,这样就可以按照出栈的方式来比较节点,因为单链表只要是有相同的节点,那么之后的节点也都是一样的,所以如 ...

  10. 转自文翼的博客:将本地时间转换为 GMT 时间

    在写 RSS 订阅接口的时候,发现最终输出文章的 RSS 时间(GMT时间),在本地上显示的时间和在服务器上显示的时间不一致. 原因是时区不一致,那么在 JavaScript 中,如何将时间转换为统一 ...