题意: 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. 青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 10(排行榜界面&界面管理)

    继上一次介绍了<神奇的六边形>的完整游戏开发流程后(可点击这里查看),这次将为大家介绍另外一款魔性游戏<跳跃的方块>的完整开发流程. (点击图片可进入游戏体验) 因内容太多,为 ...

  2. .net框架中少有人知的扩展cmod

    最近在利用metadata api抽取.net的原数据信息,发现了不少“坑”,也发现了不少常年用着c#的人都不知道的扩展. 说到.net原数据的可扩展性,第一个让人能想到的就是CustomAttrib ...

  3. js的this什么时候会出现报错

    var aa ={ name:"boy", age:, like: function(){ console.log(this.name); } } //aa.like();//这样 ...

  4. 代码设计工具——PowerDesigner

    详情请参考博客: http://www.blogjava.net/wangdetian168/archive/2011/04/07/347847.html

  5. 转:PHP中防止SQL注入的方法

    [一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...

  6. jqMobile中的dialog和popup的区别

    主要区别是:dialog默认含回退按钮.并且dialog在1.4版中已经过时,1.5中将会移除. 下面是 原文1: Using a Dialog Window as a Popup A jQuery ...

  7. Hibernate的三种状态

     Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Objec ...

  8. canvas拖动

    var canvas=document.getElementById("canvas"); var cxt=canvas.getContext("2d"); v ...

  9. canvas三角函数做椭圆运动效果

    <canvas id="canvas" width="800" height="400" style="background ...

  10. 使用Retrofit和Okhttp实现网络缓存。无网读缓存,有网根据过期时间重新请求 (转)

    使用Retrofit和Okhttp实现网络缓存,更新于2016.02.02原文链接:http://www.jianshu.com/p/9c3b4ea108a7 本文使用 Retrofit2.0.0-b ...