HDU4280 Island Transport
ISAP求最大流模板
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int maxn=;
const int inf=1e9;
struct node {
int from,to,next;
int cap;
}edge[maxn*];
int tol;
int head[maxn];
int dep[maxn];
int gap[maxn];//gep[x]=y说明残量网络中dep[i]==x的个数为y
int n;//点的个数
void init()
{
tol=;
memset(head,-,sizeof(head));
} void addedge(int u,int v,int w)
{
edge[tol].from=u;
edge[tol].to=v;
edge[tol].cap=w;
edge[tol].next=head[u];
head[u]=tol++;
}
void bfs (int st,int ed) {
memset (dep,-,sizeof(dep));
memset (gap,,sizeof(gap));
gap[]=;
queue<int> q;
dep[ed]=;
q.push(ed);
while (!q.empty()) {
int u=q.front();
q.pop();
for (int i=head[u];i!=-;i=edge[i].next) {
int v=edge[i].to;
if (dep[v]!=-) continue;
q.push(v);
dep[v]=dep[u]+;
gap[dep[v]]++;
}
}
}
int sap (int st,int ed) {
int res=;
bfs (st,ed);
int cur[maxn];
int s[maxn];
int top=;
memcpy (cur,head,sizeof(head));
int u=st;
int i;
while (dep[st]<n) {
if (u==ed) {
int tmp=inf;
int inser;
for (i=;i<top;i++)
if (tmp>edge[s[i]].cap) {
tmp=edge[s[i]].cap;
inser=i;
}
for (i=;i<top;i++) {
edge[s[i]].cap-=tmp;
edge[s[i]^].cap+=tmp;
}
res+=tmp;
top=inser;
u=edge[s[top]].from;
}
if (u!=ed&&gap[dep[u]-]==) break;
for (i=cur[u];i!=-;i=edge[i].next)
if (edge[i].cap!=&&dep[u]==dep[edge[i].to]+) break;
if (i!=-) {
cur[u]=i;
s[top++]=i;
u=edge[i].to;
}
else {
int min=n;
for (i=head[u];i!=-;i=edge[i].next) {
if (edge[i].cap==) continue;
if (min>dep[edge[i].to]) {
min=dep[edge[i].to];
cur[u]=i;
}
}
gap[dep[u]]--;
dep[u]=min+;
gap[dep[u]]++;
if (u!=st) u=edge[s[--top]].from;
}
}
return res;
}
int main() {
int start,end;
int m;
int u,v,z;
int T;
scanf("%d",&T);
while(T--) {
init();
scanf("%d%d",&n,&m);
int Min=inf;
int Max=-inf;
int x,y;
for(int i=;i<=n;i++) {
scanf("%d%d",&x,&y);
if(Min>x) {
Min=x;
start=i;
}
if(Max<x) {
Max=x;
end=i;
}
}
while(m--) {
scanf("%d%d%d",&u,&v,&z);
addedge(u,v,z);
addedge(v,u,z);
}
//n一定是点的总数,这是使用SAP模板需要注意的
int ans=sap(start,end);
printf("%d\n",ans);
}
return ;
}
HDU4280 Island Transport的更多相关文章
- HDU4280 Island Transport —— 最大流 ISAP算法
题目链接:https://vjudge.net/problem/HDU-4280 Island Transport Time Limit: 20000/10000 MS (Java/Others) ...
- Hdu4280 Island Transport 2017-02-15 17:10 44人阅读 评论(0) 收藏
Island Transport Problem Description In the vast waters far far away, there are many islands. People ...
- hdu4280 Island Transport 最大流
In the vast waters far far away, there are many islands. People are living on the islands, and all t ...
- HDU4280:Island Transport(最大流)
Island Transport Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 4280 Island Transport(网络流,最大流)
HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...
- Island Transport
Island Transport http://acm.hdu.edu.cn/showproblem.php?pid=4280 Time Limit: 20000/10000 MS (Java/Oth ...
- HDU 4280 Island Transport
Island Transport Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. Origi ...
- Hdu 4280 Island Transport(最大流)
Island Transport Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 4280 Island Transport(dinic+当前弧优化)
Island Transport Description In the vast waters far far away, there are many islands. People are liv ...
随机推荐
- 找到所有的txt文件并删除
1.find /oldboy/ -type f -name "*.txt" -delete 2.find /oldboy/ -type f -name "*.txt&qu ...
- 【 js 上传文件】
上传文件 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...
- rocketmq4.4配置日志路径等级
公司使用了最新的rocketmq框架,然后2天日志跑了快2个g.... 无奈网上只有4.2的教程...只好自己研究 环境rocketmq4.4 springboot 看源码找到配置日志等级和路径的地方 ...
- C# 选取本月周六日方法
用于工作: 1.取本月第一天就是1号 2.取下月第一天再减去一天 就是本月最后一天 3.从月头遍历至月末,判断周几 代码如下: #region 提取本月周六日 DateTime start = new ...
- POJ 2018 Best Cow Fences(二分答案)
题目链接:http://poj.org/problem?id=2018 题目给了一些农场,每个农场有一定数量的奶牛,农场依次排列,问选择至少连续排列F个农场的序列,使这些农场的奶牛平均数量最大,求最大 ...
- Redis如果内存满了怎么办?
Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小. 1.通过配置文件配置 ...
- apache+SSL 搭建https
简单介绍 一般情况下,我们打开网站默认的是使用明文传输方式,但在日常生活中,当我们在登录或者支付交易时,网站就会自动跳转至SSL(Secure Sockets Layes)加密传输模式,SSL的功能就 ...
- python专题知识追寻者对OS的理解
一 前言 OS(operating system)直接对操作系统进行操作的接口,功能真是非常强大:允许知识追寻者简要概括一下整体模块 如果要对文件进行读写可以使用os.open()方法 如果要对文件路 ...
- C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置
] {"}; "; //判断字符串的前几位在另一个字符串数组中第一次出现的索引位置 index = Array.IndexOf(s, s1.Substring(, ));
- Bugku-CTF分析篇-weblogic(黑客攻击了Weblogic应用,请分析攻击过程,找出Weblogic的主机名。)
weblogic 黑客攻击了Weblogic应用,请分析攻击过程,找出Weblogic的主机名. flag格式:flag{} Tip:主机名为十六进制.