最大流拆点——poj3281
时间:2019-06-11
本文章向大家介绍最大流拆点——poj3281,主要包括最大流拆点——poj3281使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/* 因为牛的容量为1,把牛拆点 按照s->f->cow->cow->d->t建图 */ #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; #define inf 0x3f3f3f3f #define maxn 10005 struct Edge{int to,nxt,c;}e[maxn<<1]; int head[maxn],tot,n,f,dd,s,t; void init(){memset(head,-1,sizeof head);tot=0;} void add(int u,int v,int c){ e[tot].to=v;e[tot].c=c;e[tot].nxt=head[u];head[u]=tot++; e[tot].to=u;e[tot].c=0;e[tot].nxt=head[v];head[v]=tot++; } int d[maxn]; bool bfs(){//在残量网络上构造分层图 memset(d,0,sizeof d); queue<int>q; while(q.size())q.pop(); q.push(s);d[s]=1; while(q.size()){ int x=q.front();q.pop(); for(int i=head[x];i!=-1;i=e[i].nxt){ int y=e[i].to; if(d[y] || e[i].c==0)continue; q.push(y); d[y]=d[x]+1; if(y==t)return 1; } } return 0; } int dfs(int x,int flow){ if (x==t)return flow; int rest=flow; for(int i=head[x];i!=-1 && rest>0;i=e[i].nxt){ int y=e[i].to; if(e[i].c==0 || d[y]!=d[x]+1)continue; int k=dfs(y,min(rest,e[i].c)); if(!k) d[y]=0; //y点已经被增广完毕,本次dinic时不会再访问这个点 e[i].c-=k; e[i^1].c+=k; rest-=k; } return flow-rest; } int dinic(){ int ans=0; while(bfs()) while(int flow=dfs(s,inf)) ans+=flow; return ans; } /*牛编号[1,2*n],食物编号[2*n+1,n*2+f],饮料编号[2*n+f+1,2*n+f+d]*/ int main(){ init(); cin>>n>>f>>dd; s=0;t=2*n+f+dd+1; for(int i=1;i<=f;i++)add(s,2*n+i,1); for(int i=1;i<=dd;i++)add(2*n+f+i,t,1); for(int i=1;i<=n;i++){ int k1,k2,F,D; cin>>k1>>k2; add(i,i+n,1);//拆点 while(k1--){ cin>>F; add(2*n+F,i,1); } while(k2--){ cin>>D; add(i+n,2*n+f+D,1); } } cout<<dinic()<<'\n'; }
原文地址:https://www.cnblogs.com/zsben991126/p/11003128.html
- Sqoop抽取Hive Parquet表数据到MySQL异常分析
- Hue中使用Oozie创建Ssh工作流时sudo命令执行失败问题分析
- [译]Safari URL重定向漏洞(CVE-2016-4585)利用分析
- Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)
- 百篇(5):FeignClient 在不同场景中的应用
- 如何使用Hue上创建一个完整Oozie工作流
- MySQL远程代码执行/权限提升漏洞的分析与实践(CVE-2016-6662)
- 如何在CDH集群上部署Python3运行环境及运行Python作业
- Hacking Aria2 RPC Daemon
- 如何修改CDH集群的DataNoe节点HOSTNAME
- Sparkjava Framework 文件遍历漏洞(CVE-2016-9177)分析与探究
- 绕过混合内容警告 - 在安全的页面加载不安全的内容
- 如何在Kerberos环境使用Flume采集Kafka数据并写入HDFS
- 熊市里生成几个BTC靓号,冷存储起来装死吧
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Netty之旅二:口口相传的高性能Netty到底是什么?
- 前端知识复习(一)
- Powershell运行脚本报错:此系统上禁止运行脚本
- git rebase解决合并冲突
- npm相关操作
- Angular html property的值如何被更新的
- Centos 7 使用mailx发送邮件
- Centos 7 备份MySQL
- Centos 7 备份MySQL/MongoDB并发邮件脚本
- Nginx启动报错:sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object
- 有赞美业店铺装修前端解决方案
- nginx部署react项目
- Golang 标准库 限流器 time/rate 设计与实现
- Node搭建简易的UDP服务器
- cordova run android 下载gradle报timeout