HDU 4280Island Transport(Dinc非STL 模板)
题意: 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 模板)的更多相关文章
- HDU 4280Island Transport(网络流之最大流)
题目地址:pid=4280">http://acm.hdu.edu.cn/showproblem.php? pid=4280 这个题是一个纯最大流模板题..就是用来卡时间的.. 还好我 ...
- C++非类型模板参数
对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数.在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定.但是在这里,我们面对的是这 ...
- 泛型编程、STL的概念、STL模板思想及其六大组件的关系,以及泛型编程(GP)、STL、面向对象编程(OOP)、C++之间的关系
2013-08-11 10:46:39 介绍STL模板的书,有两本比较经典: 一本是<Generic Programming and the STL>,中文翻译为<泛型编程与STL& ...
- 标准非STL容器 : bitset
1. 概念 什么是"标准非STL容器"?标准非STL容器是指"可以认为它们是容器,但是他们并不满足STL容器的所有要求".前文提到的容器适配器stack.que ...
- C++ Template之非类型模板参数
非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...
- DLL中导出STL模板类的问题
接上一篇. 上一篇的dll在编译过程中一直有一个警告warning C4251: ‘CLASS_TEST::m_structs’ : class ‘std::vector<_Ty>’ ne ...
- C++标准库函数 end 的实现原理(非类型模板参数)
在刚开始学习<C++ Primer>的时候遇到了 end 函数,感觉很神奇,但又很迷惑:为什么能获得数组的尾后指针呢?编译器也不会在内存中申请一块空间放数组元素的个数啊!最近再一次遇到了 ...
- 队列问题非STL解决方案
队列问题非STL解决方案 常年使用STL解决队列问题,以至于严重生疏队列的根本原理... 直到今日 被老师被迫 使用算法原理解决问题,方才意识到我对队列一窍不通... ...直到 经过一系列的坑蒙拐骗 ...
- c++11-17 模板核心知识(三)—— 非类型模板参数 Nontype Template Parameters
类模板的非类型模板参数 函数模板的非类型模板参数 限制 使用auto推断非类型模板参数 模板参数不一定非得是类型,它们还可以是普通的数值.我们仍然使用前面文章的Stack的例子. 类模板的非类型模板参 ...
随机推荐
- 通向高可扩展性之路(推特篇) ---- 一个推特用来支撑1亿5千万活跃用户、30万QPS、22MB每秒Firehose、以及5秒内推送信息的架构
原文链接:http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active ...
- wap端开发必须基础
1. nitial-scale=1.0 确保网页加载时,以 1:1 的比例呈现,不会有任何的缩放. 在移动设备浏览器上,通过为 viewport meta 标签添加 user-scalable=no ...
- NIO框架Mina学习
前言: 找了篇文章看了看,nio框架数Mina用的最多! 代码: 服务端: package com.mina; import java.net.InetSocketAddress; import ja ...
- XSS attack
<html> <form action="" method="post"> <input type="text" ...
- Jsoup获取部分页面数据失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...
- javascript 方法实例
输出对象的属性名称与值 : boj(o){ for(var p in o){ console.log(p + ":" + o[p] + "\n"); } } 构 ...
- Linux查找最近修改的文件
查找当前目录下.phtml文件中,最近30分钟内修改过的文件. find . -name 查找当前目录下.phtml文件中,最近30分钟内修改过的文件,的详细情况. find . -name -ls ...
- 工具软件发现(编写chm 文件的工具)
编写chm 文件的工具 1.PrecisionHelper 安装之后,发现 编写的很不方便,直接在html 上编写-- 不好用 2.Winchm (推荐) 很好用,赞!至少对比了上面那个复杂的操作之后 ...
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...
- 代理、通知、KVO的应用
实现下图效果,每点击一次cell的“加号”或者“减号”,就可以让“底部view”的总价进行对应的增加或者减少. 下图是实际运行效果图: 图(1) 因为“底部UIView”需要一直显示在底部.如果把底部 ...