poj 3469(网络流模版)

题目链接:http://poj.org/problem?id=3469

思路:终于把网络流的模版测试好了,在Dinic和Sap之间还是选择了Sap,事实证明Sap确实比Dinic效率高,在此贴出自己的网络流模版:

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 #include<queue>
  6 using namespace std;
  7 #define MAXN 44444
  8 #define MAXM 999999
  9 #define inf 1<<30
 10 
 11 struct Edge {
 12     int v,cap,next;
 13 } edge[MAXM];
 14 
 15 int n,m,vs,vt,NE,NV;
 16 int head[MAXN];
 17 
 18 void Insert(int u,int v,int cap)
 19 {
 20     edge[NE].v=v;
 21     edge[NE].cap=cap;
 22     edge[NE].next=head[u];
 23     head[u]=NE++;
 24 
 25     edge[NE].v=u;
 26     edge[NE].cap=0;
 27     edge[NE].next=head[v];
 28     head[v]=NE++;
 29 }
 30 
 31 int level[MAXN];
 32 int gap[MAXN];
 33 
 34 void bfs(int vt)
 35 {
 36     memset(level,-1,sizeof(level));
 37     memset(gap,0,sizeof(gap));
 38     level[vt]=0;
 39     gap[level[vt]]++;
 40     queue<int>que;
 41     que.push(vt);
 42     while(!que.empty()) {
 43         int u=que.front();
 44         que.pop();
 45         for(int i=head[u]; i!=-1; i=edge[i].next) {
 46             int v=edge[i].v;
 47             if(level[v]!=-1)continue;
 48             level[v]=level[u]+1;
 49             gap[level[v]]++;
 50             que.push(v);
 51 
 52         }
 53     }
 54 }
 55 
 56 
 57 int pre[MAXN];
 58 int cur[MAXN];
 59 
 60 int SAP(int vs,int vt)
 61 {
 62     bfs(vt);
 63     memset(pre,-1,sizeof(pre));
 64     memcpy(cur,head,sizeof(head));
 65     int u=pre[vs]=vs,flow=0,aug=inf;
 66     gap[0]=NV;
 67     while(level[vs]<NV) {
 68         bool flag=false;
 69         for(int &i=cur[u]; i!=-1; i=edge[i].next) {
 70             int v=edge[i].v;
 71             if(edge[i].cap&&level[u]==level[v]+1) {
 72                 flag=true;
 73                 pre[v]=u;
 74                 u=v;
 75                 //  aug=(aug==-1?edge[i].cap:min(aug,edge[i].cap));
 76                 aug=min(aug,edge[i].cap);
 77                 if(v==vt) {
 78                     flow+=aug;
 79                     for(u=pre[v]; v!=vs; v=u,u=pre[u]) {
 80                         edge[cur[u]].cap-=aug;
 81                         edge[cur[u]^1].cap+=aug;
 82                     }
 83                     //     aug=-1;
 84                     aug=inf;
 85                 }
 86                 break;
 87             }
 88         }
 89         if(flag)continue;
 90         int minlevel=NV;
 91         for(int i=head[u]; i!=-1; i=edge[i].next) {
 92             int v=edge[i].v;
 93             if(edge[i].cap&&level[v]<minlevel) {
 94                 minlevel=level[v];
 95                 cur[u]=i;
 96             }
 97         }
 98         if(--gap[level[u]]==0)break;
 99         level[u]=minlevel+1;
100         gap[level[u]]++;
101         u=pre[u];
102     }
103     return flow;
104 }
105 
106 
107 int main()
108 {
109     int u,v,w,w1,w2;
110     scanf("%d%d",&n,&m);
111     vs=0;
112     vt=n+1;
113     NV=n+2;
114     NE=0;
115     memset(head,-1,sizeof(head));
116     for(int i=1; i<=n; i++) {
117         scanf("%d%d",&w1,&w2);
118         Insert(vs,i,w1);
119         Insert(i,vt,w2);
120     }
121     for(int i=1; i<=m; i++) {
122         scanf("%d%d%d",&u,&v,&w);
123         Insert(u,v,w);
124         Insert(v,u,w);
125     }
126     printf("%d\n",SAP(vs,vt));
127     return 0;
128 }
View Code

 

转载于:https://www.cnblogs.com/wally/p/3274438.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盒子的真实宽高

盒子的宽 两边border 两边padding 盒子的高度 上下border 上下padding

leetcode第 46 场双周赛

题目A https://leetcode-cn.com/problems/longest-nice-substring/ 因为 length≤100length \leq 100length≤100&#xff0c;我们直接就可以遍历子串然后更新答案。 class Solution { public:bool Check(string s){unordered_set<int> m;for (auto u : s)m.insert(u);…

margin相关技巧

1、设置元素水平居中; margin:0 auto; margin负值让元素位移及合并边框 外边距合并&#xff1a; 外边距合并指的是:当两个垂直外边距相遇时,他们将行程一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者:一个格子距下30px,下面的格子距上100px,边距…

04.卷积神经网络 W1.卷积神经网络

文章目录1. 计算机视觉2. 边缘检测示例3. 更多边缘检测4. Padding5. 卷积步长6. 三维卷积7. 单层卷积网络8. 简单卷积网络示例9. 池化层10. 卷积神经网络示例11. 为什么使用卷积&#xff1f;作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 计算机视觉 举例&#xff1a;图…

httpClient学习笔记1

客服端以post请求输入xml的输入流&#xff0c;来到服务器端&#xff0c;服务器端接到输入流&#xff0c;进行处理&#xff0c;处理完毕后&#xff0c;返回xml信息的返回输出流&#xff0c;来告诉对方成功与否。 htppClient的使用至少需要commons-httpclient-3.1.jar&#xff0c…

JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中

javaSE从 2021/02/22开始&#xff0c;预计到2021/02/28&#xff0c;原本预计的算法题解先鸽一下。 -博客Blog的重要性 & Markdown语法 基础markdown语法 标题&#xff0c; 直接使用 ‘#’&#xff0c;一级二级…五级字体&#xff0c;斜体(左右个一个∗*∗)&#xff0c;加…

元素(块、行内、行内块

块元素的特点 1.支持所有样式 2.块级元素 独占一行 3.块级元素默认宽度和父元素一样 常用块元素块级元素 一般 div p ol ul h1-h6 li dl dt dd 等都是 初始化(样式重置) 1.实际开发中&#xff0c;我们会把这些默认的样式在样式定义开头清除掉&#xff0c;清除掉这些默认样式&…

LeetCode 1031. 两个非重叠子数组的最大和(一次遍历,要复习)*

文章目录1. 题目2. 解题2.1 暴力枚举2.2 一次遍历1. 题目 给出非负整数数组 A &#xff0c;返回两个非重叠&#xff08;连续&#xff09;子数组中元素的最大和&#xff0c;子数组的长度分别为 L 和 M。&#xff08;这里需要澄清的是&#xff0c;长为 L 的子数组可以出现在长为…

资料合集

cocos2d-x http://www.microoh.com/index.php 杂谈 http://www.yixieshi.com/ as3读excel https://github.com/childoftv/as3-xlsx-reader 提问 http://stackoverflow.com/转载于:https://www.cnblogs.com/chenhongyu/p/3282918.html

Java入门篇 2021/02/22

Java入门篇 2021/02/22 Java的三大版本 java三大版本主要包括 JavaSE, JavaME, JavaEE&#xff0c;其中现如今的JavaME已经是很少见了&#xff0c;JavaSE是JavaEE的基础。 JDK、JER、JVM三个关系 JDK, JRE, JVM具体的关系可以参照下图&#xff0c;是名副其实的包含关系。 J…

iOS 开发者必不可少的 75 个工具

如果你去到一位熟练的木匠的工作室&#xff0c;你总是能发现他/她有一堆工具来完成不同的任务。软件开发同样如此。你可以从软件开发者如何使用工具中看出他水准如何。有经验的开发者精于使用工具。对你目前所使用的工具不断研究&#xff0c;同时了解一些替代品的使用&#xff…

LeetCode 911. 在线选举(二分查找)

文章目录1. 题目2. 解题1. 题目 在选举中&#xff0c;第 i 张票是在时间为 times[i] 时投给 persons[i] 的。 现在&#xff0c;我们想要实现下面的查询函数&#xff1a; TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。 在 t 时刻投出的选票也将被计入…

定位position(前面布局无法实现

文档流 文档流&#xff0c;是指盒子按照html标签编写的顺序依次从上到下&#xff0c;从左到右排列&#xff0c;块元素占一行&#xff0c;行内元素在一行之内从左到右排列&#xff0c;先写的先排列&#xff0c;后写的排在后面&#xff0c;每个盒子都占据自己的位置。 定位&…

java 流程控制篇 2021/02/26持续更新中

1. 用户交互Scanner 1.1 简单的Scanner用法 首先&#xff0c;需要 import java.util.Scanner其次&#xff0c;需要创建一个 Scanner 类的对象&#xff0c; Scanner s new Scanner(System.in);通过调用Scanner对象的方法来完成&#xff0c; 一定要注意有开有关&#xff0c;最…

从Ubuntu12.04LTS到Foreda19再到Foreda8

装Ubuntu的初衷是以为它能识别我的PCI无线网卡&#xff0c;但装了两遍没有做到。 昨天在Ubuntu装jdk7&#xff0c;其过程与正常Linux安装jdk差别不小&#xff0c;有点背离的意思。另外VI的用法也和正常Unix/Linux不一样&#xff0c;有点别扭。 昨晚又下了一个Foreda19&#xff…

04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)

文章目录作业1&#xff1a;实现卷积神经网络1. 导入一些包2. 模型框架3. 卷积神经网络3.1 Zero-Padding3.2 单步卷积3.3 卷积神经网络 - 前向传播4. 池化层5. 卷积神经网络 - 反向传播5.1 卷积层反向传播5.1.1 计算 dA5.1.2 计算 dW5.1.3 计算 db5.2 池化层 - 反向传播5.2.1 最…

tabel表格制作及操作

表格的基本用法 l table表示表格开始表格结束 l tr表示表格中的行标签一个表格中有多少行就应该书写多少对tr标签 l td表示表格中的单元格标签一行中有多少个单元格就应该书写多少对td标签 l表格中所有的内容都必须在放置在td标签里面 也就是说只有td标签才能存放内容 l t…

html的实战性介绍

Html 简介 超文本结构语言 html并非一种编程语言&#xff0c; 而是一种描述超文本文档的标记语言&#xff0c;用html编写的超文本文档成为html文档。 超文本文档指的是&#xff0c;可以加入图片、声音、动画、影视等内容&#xff0c;并可以利用超链接方便的从一个文件跳转到网…

前端:background背景图

background背景图 属性解释 background属性是css中应用比较多&#xff0c;且比较重要的一个属性&#xff0c;它是负责给盒子设置背景图片和背景颜色的&#xff0c;background是一个复合属性&#xff0c;它可以分解成如下几个设置项&#xff1a; background-color 设置背景颜色…

LeetCode 808. 分汤(动态规划)

文章目录1. 题目2. 解题1. 题目 有 A 和 B 两种类型的汤。一开始每种类型的汤有 N 毫升。有四种分配操作&#xff1a; 提供 100ml 的汤A 和 0ml 的汤B。提供 75ml 的汤A 和 25ml 的汤B。提供 50ml 的汤A 和 50ml 的汤B。提供 25ml 的汤A 和 75ml 的汤B。 当我们把汤分配给某…