Bzoj 2502: 清理雪道 有上下界网络流_最小流
好长时间没有写网络流了,感觉好手生.
对于本题,设一个源点 $s$ 和 $t$.
1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.
2.由每个点向 $t$ 连一条没有下界,容量为无限大的边,表示以该点为终点.
为了保证每条原图中得边都能被覆盖掉,再将原图中的边连一条无上界,下界为 1 的边.
最后,跑一遍最小流即可.
Code:
- // luogu-judger-enable-o2
- #include<bits/stdc++.h>
- using namespace std;
- #define setIO(s) freopen(s".in","r",stdin)
- #define maxn 2000
- #define inf 1000000
- int tot;
- void ini(){ tot=1000; }
- int newnode(){ return ++tot; }
- struct Edge{
- int from,to,cap;
- Edge(int a=0,int b=0,int c=0):from(a),to(b),cap(c){}
- };
- vector<int>G[maxn];
- vector<Edge>edges;
- void addedge(int u,int v,int c){
- edges.push_back(Edge(u,v,c));
- edges.push_back(Edge(v,u,0));
- int m=edges.size();
- G[u].push_back(m-2);
- G[v].push_back(m-1);
- }
- namespace maxflow{
- int s,t;
- int d[maxn],vis[maxn];
- int current[maxn];
- queue<int>Q;
- int BFS(){
- memset(vis,0,sizeof(vis));
- vis[s]=1,d[s]=0;
- Q.push(s);
- while(!Q.empty()){
- int u=Q.front();Q.pop();
- int sz=G[u].size();
- for(int i=0;i<sz;++i){
- Edge v=edges[G[u][i]];
- if(!vis[v.to]&&v.cap>0) {
- d[v.to]=d[u]+1,vis[v.to]=1;
- Q.push(v.to);
- }
- }
- }
- return vis[t];
- }
- int dfs(int x,int cur){
- if(x!=t){
- int f,flow=0,sz=G[x].size();
- for(int i=current[x];i<sz;++i){
- current[x]=i;
- Edge r = edges[G[x][i]];
- if(d[r.to]==d[x]+1&&r.cap>0) {
- f=dfs(r.to,min(cur,r.cap));
- if(f>0){
- flow+=f,cur-=f;
- edges[G[x][i]].cap-=f,edges[G[x][i]^1].cap+=f;
- }
- }
- if(!cur) break;
- }
- return flow;
- }
- else return cur;
- }
- int GET(){
- int ans=0;
- while(BFS()) {
- memset(current,0,sizeof(current));
- ans+=dfs(s,inf);
- }
- return ans;
- }
- };
- int main(){
- //setIO("input");
- ini();
- int n,s,t,ss,tt;
- s=0,t=newnode(),ss=newnode(),tt=newnode();
- scanf("%d",&n);
- for(int i=1,m=0,v;i<=n;++i) {
- scanf("%d",&m);
- while(m--){
- scanf("%d",&v);
- addedge(i,v,inf-1),addedge(s,i,inf),addedge(v,t,inf);
- addedge(ss,v,1),addedge(i,tt,1);
- }
- }
- int rec=edges.size();
- addedge(t,s,inf);
- maxflow::s=ss,maxflow::t=tt;
- maxflow::GET();
- int ans1=edges[rec^1].cap;
- edges[rec^1].cap=edges[rec].cap=0;
- maxflow::s=t, maxflow::t=s;
- ans1-=maxflow::GET();
- printf("%d",ans1);
- return 0;
- }
Bzoj 2502: 清理雪道 有上下界网络流_最小流的更多相关文章
- [BZOJ2502]清理雪道 有上下界网络流(最小流)
2502: 清理雪道 Time Limit: 10 Sec Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场 ...
- BZOJ 2502: 清理雪道 | 有上下界最小流
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #defi ...
- P4843 清理雪道(上下界网络流)
P4843 清理雪道 上下界最小流 我们先搞一遍上下界可行流(转) 回忆上下界最大流的写法:在可行流的残量网络$s\ -\ t$上跑最大流,答案为可行流$+$残量网络的最大流 那么上下界最小流的写法呢 ...
- BZOJ 2502: 清理雪道
BZOJ 2502: 清理雪道 标签(空格分隔): OI-BZOJ OI-最小流 OI-上下界网络流 Time Limit: 10 Sec Memory Limit: 128 MB Descripti ...
- hdu 4940 Destroy Transportation system( 无源汇上下界网络流的可行流推断 )
题意:有n个点和m条有向边构成的网络.每条边有两个花费: d:毁坏这条边的花费 b:重建一条双向边的花费 寻找这样两个点集,使得点集s到点集t满足 毁坏全部S到T的路径的费用和 > 毁坏全部T到 ...
- HDU3157 Crazy Circuits(有源汇流量有上下界网络的最小流)
题目大概给一个电路,电路上有n+2个结点,其中有两个分别是电源和负载,结点们由m个单向的部件相连,每个部件都有最少需要的电流,求使整个电路运转需要的最少电流. 容量网络的构建很容易,建好后就是一个有源 ...
- bzoj 2502 清理雪道 (有源汇上下界最小流)
2502: 清理雪道 Time Limit: 10 Sec Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场 ...
- 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)
2502: 清理雪道 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 594 Solved: 318[Submit][Status][Discuss] ...
- 【bzoj2502】清理雪道 有上下界最小流
题目描述 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞 ...
随机推荐
- 发现被坑了,从来没看到说java的Date一旦实例化时间就不会变了
java中使用Date对象获取系统当前时间,然而我就没看到哪篇教程告诉我说Date创建对象之后其中的时间是不会变的!!! 一开始我写了类似于下边这样的代码,希望每隔一段时间显示一次时间 Date d= ...
- 如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin
之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2. ...
- Spring MVC @PathVariable with dot (.) is getting truncated.
转自:http://stackoverflow.com/questions/3526523/spring-mvc-pathvariable-getting-truncated (这里只截取了问题,和笔 ...
- 训练1-A
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据,分别是成对出现的花布条和 ...
- BA-通讯总线-百通1419a和9841
百通1419A线缆的简单介绍: Belden1419A- Belden电缆线1419A 多股导体—低容计算机电缆 FOR EIA RS-232/422 Belden 1419A是24 AWG(7*32 ...
- EJB学习(四)——Enterprise Bean(企业Bean)和Entity Bean(实体Bean)
一.为什么使用EJB ? 企业Bean执行在EJB容器中.企业Bean实际上就是一个封装了业务逻辑的Java类,那么我们为什么要使用EJB呢 ? 1.最重要的原因:分布式.简要的说,分布式能够 ...
- 畅通project续HDU杭电1874【dijkstra算法 || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多 ...
- AS常见的错误
导入的项目使用的gradle版本和本地的要一致,不然会提示类似"Minimum supported Gradle version is 3.3. Current version is 2.1 ...
- 前端 自定义format函数
为字符串创建format方法,用于字符串格式化 {# 前端没有字符串占位符%s的替代方法,以下是自定义字符串替换的方法,以后前端拓展方法都可以使用下面的形式 #} String.prototype. ...
- HTML5 格式化方式以及应用
<b>加粗字体 <big>定义大号字体 <em>定义着重文字 <i>定义斜体字 <small>定义小号字体 <strong>定义 ...