题意: 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. List<T>与Dictionary<string,T>频繁检索的性能差距

    一直对LINQ简洁高效的语法青睐有加,对于经常和资料库,SQL语法打交道的C#开发者来说,LINQ无疑是一个非常不错的选择,当要在List<T>(T为一个普通对象)集合中查找满足某些条件的 ...

  2. 从setTimeout谈JavaScript运行机制

    从setTimeout说起 众所周知,JavaScript是单线程的编程,什么是单线程,就是说同一时间JavaScript只能执行一段代码,如果这段代码要执行很长时间,那么之后的代码只能尽情地等待它执 ...

  3. checkbox js onclick ajax,列表页表格中修改数据

    <input type='checkBox' value='".$row["p_id"]."' onclick='changeisNew(this);'& ...

  4. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

  5. nios II--实验6——串口硬件部分

    串口 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> 进 ...

  6. Java 自动装箱与拆箱(Autoboxing and unboxing)

    什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = ...

  7. hiho一下 第六十四周 Right-click Context Menu

    题目链接:hihocoder 第64周 题意概述: 上下文菜单是panel(面板)包括很多section(分区),一个分区里面至少包含一个菜单项.每一个菜单项都对应有一个子panel,这个panel可 ...

  8. 89c51中断入口地址表

    中断源   中断入口地址 外部中断0 0003H 定时器/计数器T0 000BH 外部中断1 0013H 定时器/计数器T1 001BH 串行口中断   0023H

  9. ubuntu 下mysql中文乱码问题解决方案

    mysql> show variables like 'character%';+--------------------------+----------------------------+ ...

  10. Gitlab的搭建

    从网上看了一大堆的资料,最终选定按照github上的文档来搭建,虽然本人英文不好,就这样看着 这个博客弯曲完全是拷贝过来的,只为了做个笔记 原文地址:https://github.com/gitlab ...