有源汇有上下界的最小可行流。

YY一下建图应该很好搞吧(?

就是对于每个雪道都是[1,inf]然后源点到所有点都是[0,inf]所有点到汇点都是[0,inf]

这样的话跑一个有源汇上下界最小可行流就可以了

有关于这个可以看liu_runda神犇的介绍 非常直观易懂

最开始先建超级源汇 跑可行流得到一个基础流量 然后反向在残余网络上跑最大流减去即可

注意最后的时候是需要反向在残余网络上跑的 不要忘记交换源汇

代码。

//Love and Freedom.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define inf 20021225
#define ll long long
#define N 200
#define M 40000
using namespace std; struct edge{int lt,to,f;}e[M<<];
int cnt=,in[N],dep[N],s,t,ss,tt;
queue<int> q;
void add(int x,int y,int f)
{
e[++cnt].to = y; e[cnt].lt = in[x]; in[x] = cnt; e[cnt].f = f;
e[++cnt].to = x; e[cnt].lt = in[y]; in[y] = cnt; e[cnt].f = ;
}
bool bfs()
{
while(!q.empty()) q.pop();
q.push(s); memset(dep,,sizeof(dep)); dep[s] = ;
while(!q.empty())
{
int x = q.front(); q.pop();
for(int i=in[x];i;i=e[i].lt)
{
int y = e[i].to; if(dep[y] || !e[i].f) continue;
dep[y] = dep[x]+; q.push(y);
if(y==t) return ;
}
}
return ;
}
int dfs(int x,int f)
{
if(!f || x==t) return f;
int flow = f;
for(int i=in[x];i;i=e[i].lt)
{
int y = e[i].to;
if(dep[y] == dep[x]+ && e[i].f && flow)
{
int cur = dfs(y,min(flow,e[i].f));
e[i^].f += cur; e[i].f -= cur;
flow -= cur; if(!flow) return f;
}
}
dep[x] = -; return f-flow;
}
int dinic()
{
int ans = ;
while(bfs()) ans+=dfs(s,inf);
return ans;
}
int most[M],f[N],n;
void del(int x)
{
for(int i=in[x];i;i=e[i].lt)
e[i].f = e[i^].f = ;
}
int main()
{
s = N-; t = s+; ss = t+; tt = ss+;
scanf("%d",&n);
for(int x=;x<=n;x++)
{
int i,y; scanf("%d",&i);
while(i--)
{
scanf("%d",&y); f[y]++; f[x]--;
add(x,y,inf);
}
}
for(int x=;x<=n;x++){add(s,x,inf); add(x,t,inf);}
for(int i=;i<=n;i++)
{
if(f[i]<) add(i,tt,-f[i]);
else add(ss,i,f[i]);
}
add(t,s,inf); int tmps = s,tmpt = t;
s = ss; t = tt; int flow = dinic();
flow = e[cnt].f; e[cnt].f = e[cnt-].f = ;
del(ss); del(tt); s = tmpt,t = tmps;
printf("%d\n",flow-dinic());
return ;
}

洛谷4843 BZOJ2502 清理雪道的更多相关文章

  1. [BZOJ2502]清理雪道

    [BZOJ2502]清理雪道 试题描述 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定 ...

  2. BZOJ2502:清理雪道(有上下界最小流)

    Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时 ...

  3. [BZOJ2502]清理雪道 有上下界网络流(最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场 ...

  4. [BZOJ2502]清理雪道解题报告|带下界的最小流

    滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机,每次飞 ...

  5. 【上下界网络流】bzoj2502: 清理雪道

    模型:无源汇有上下界可行流 LJN:模板题吧 Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的 ...

  6. 洛谷2943 [USACO09MAR]清理Cleaning Up——转变枚举内容的dp

    题目:https://www.luogu.org/problemnew/show/P2943 一下想到n^2.然后不会了. 看过TJ之后似乎有了新的认识. n^2的冗余部分在于当后面那部分的种类数一样 ...

  7. bzoj2502: 清理雪道(有源汇有上下界最小流)

    传送门 别说话,自己看,我不会->这里 我这里用的建图方法是先跑一次最大流,连上$(t,s,inf)$之后再跑一遍,然后答案就是之前连的那条边的反向边的流量 据说还有种方法是连上$(t,s,in ...

  8. bzoj2502清理雪道

    传送门 好题啊,由于每个点既可以进,也可以出,就可以新建一个源点和汇点,对于每个点都连边,然后就是最小流板子了. 代码: #include<cstdio> #include<iost ...

  9. [bzoj2502]清理雪道[上下界网络流]

    bzoj状态里有两种,一种时间是个位数,一种是四位数,我就是四位数的那种,,,估计都是看了hzwer.. #include <bits/stdc++.h> #define INF 0x3f ...

随机推荐

  1. vim安装bundle和使用

    一.准备工作 安装Git(因为下面我们选择的插件管理器需要使用到它)安装其他插件前首先需要选择一个Vim插件管理器,我这里选择的是Vundle,Vundle的工作过程中需要通过Git自动从远程创库同步 ...

  2. [UOJ211][UER #6]逃跑

    题意:从原点出发,走\(n\)次,每次往四个方向中随机一个走,走每个方向有个概率,求所有方案走到过的点数的方差. 题解:orz kczno1 \(E*all=\sum (a_i-avg)^2*all= ...

  3. Shiro学习资料

    这篇博客的作者是张开涛,他写了很多专题文章,值得关注一下. 博客专栏 - 跟我学Shirohttp://www.iteye.com/blogs/subjects/shiro

  4. app中使用

    KeepLive.startWork(this, KeepLive.RunMode.ROGUE, ForegroundNotification("Title", "mes ...

  5. mui初级入门教程(三)— html5+ XMLHttpRequest 与mui ajax用法详解

    文章来源:小青年原创发布时间:2016-05-29关键词:mui,html5+,XMLHttpRequest,ajax,懒加载转载需标注本文原始地址: http://zhaomenghuan.gith ...

  6. C++ Map相同key是否覆盖问题分析

    C++的标准库关联容器map是不允许有key相同的键值对存在的.那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗? 测试代码: 测试结果: 从测试结果我们可以得 ...

  7. MySQL分组聚合group_concat + substr_index

    场景:给予一张商品售卖表,表中数据为商品的售卖记录,假设表中数据是定时脚本插入的,每个时间段的商品售卖数量不同,根据此表找各个商品的最多售卖数量的数据. 1.数据表 CREATE TABLE `goo ...

  8. loj#2332 「JOI 2017 Final」焚风现象

    分析 我们发现改变一个区间实际上只有两个端点的贡献变换 代码 #include<bits/stdc++.h> using namespace std; #define int long l ...

  9. 1208C Magic Grid

    题目大意 给你一个n 让你用0~n^2-1的数填满一个n*n的正方形 满足每个数值出现一次且每行每列的异或值相等 输出任意一种方案 分析 我们发现对于4*4的正方形 0  1  2  3 4  5  ...

  10. Jenkins使用一:CentOS7安装Jenkins

    安装jdk环境: yum search jdk 装 1.8版本的:yum install -y java-1.8.0-openjdk 安装Jenkins wget -O /etc/yum.repos. ...