题意: 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. 系统升级日记(1)- 升级到SQL Server 2012

    最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...

  2. js的一些冷门的用法

    1.delete 2.void 0 3.>>> 4.>>0 字符串转为数字 5.[] == ![] 6.

  3. PKI系统深入介绍

    公钥基础设施(Public Key Infrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因 此,对PKI技术的研究和开发成为目前信息安全领域的热点. ...

  4. 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型:解决方法

    http://blog.csdn.net/xiaochongchong1248/archive/2009/11/20/4841193.aspx?1271573283 编程环境要求:VS2008/FX2 ...

  5. 运维mysql基础

    1 mysql简介 一般写某个东西先介绍一下,我就老生常谈的简单介绍下(摘自维基百科) https://zh.wikipedia.org/wiki/MySQL MySQL(官方发音为英语发音:/maɪ ...

  6. 「个人vim插件+配置」

    2016.10.4 filetype indent on syntax on set nu ai ci si set sw= ts= set autochdir set backspace= colo ...

  7. 在MAC上搭建tomcat,再使用servlet时遇到的问题。

    说起来真是惭愧.在mac上配置tomcat环境时.tomcat6能正确运行.但是7,8都运行不了.具体表现是tomcat6访问127.0.0.1:8080可以显示那个界面,然而tomcat7和8都显示 ...

  8. python面向对象

    1.概念 类:(class):具有相同属性和方法的对象的集合.用来定义该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 实例化:创建一个类的实例,类的具体对象. 对象:通过 ...

  9. ubuntu apt-get update失败 解决方法

    ubuntu apt-get update失败 1.出现错误:E:Could not get lock /var/lib/apt/lists/lock - open (11: Resource tem ...

  10. codeforces 723B:Text Document Analysis

    Description Modern text editors usually show some information regarding the document being edited. F ...