BZOJ 2502: 清理雪道 | 有上下界最小流
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define N 405
#define INF 0x3f3f3f3f
#define M 200005
using namespace std;
int head[N],cur[N],n,m,S,T,d[N],s,t,sum,ecnt=,lev[N],ans,dec;
queue<int> q;
struct adj
{
int nxt,v,w;
}e[M];
void add(int u,int v,int w)
{
e[++ecnt].v=v;e[ecnt].nxt=head[u];e[ecnt].w=w;head[u]=ecnt;
e[++ecnt].v=u;e[ecnt].nxt=head[v];e[ecnt].w=;head[v]=ecnt;
}
bool bfs()
{
for (int i=;i<=T;i++)
cur[i]=head[i],lev[i]=-;
q.push(S);lev[S]=;
while (!q.empty())
{
int u=q.front();q.pop();
for (int i=head[u],v;i;i=e[i].nxt)
if (lev[v=e[i].v]==- && e[i].w>)
q.push(v),lev[v]=lev[u]+;
}
return lev[T]!=-;
}
int dfs(int u,int flow)
{
if (u==T) return flow;
int ret=,v,delta;
for (int &i=cur[u];i;i=e[i].nxt)
if (lev[v=e[i].v]==lev[u]+ && e[i].w>)
{
delta=dfs(v,min(flow-ret,e[i].w));
if (delta)
{
e[i].w-=delta;e[i^].w+=delta;ret+=delta;
if (ret==flow) break;
}
}
return ret;
}
int main()
{
scanf("%d",&n);
s=n+;t=n+;S=t+;T=S+;add(t,s,INF);
for (int i=,u,v;i<=n;i++)
{
scanf("%d",&u);
while (u--)
{
scanf("%d",&v);
add(i,v,INF-);
d[i]--,d[v]++;
}
}
for (int i=;i<=n;i++)
add(s,i,INF),add(i,t,INF);
for (int i=;i<=n;i++)
if (d[i]>) add(S,i,d[i]);
else if (d[i]<) add(i,T,-d[i]);
while (bfs()) ans+=dfs(S,INF);
for (int i=head[S];i;i=e[i].nxt) e[i].w=e[i^].w=;
for (int i=head[T];i;i=e[i].nxt) e[i].w=e[i^].w=;
sum=e[].w;e[].w=e[].w=;
S=t;T=s;
while (bfs()) dec+=dfs(S,INF);
printf("%d\n",sum-dec);
return ;
}
BZOJ 2502: 清理雪道 | 有上下界最小流的更多相关文章
- Bzoj 2502: 清理雪道 有上下界网络流_最小流
好长时间没有写网络流了,感觉好手生.对于本题,设一个源点 $s$ 和 $t$.1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.2.由每个点向 $t$ 连一条没有下界,容量为 ...
- BZOJ2502:清理雪道(有上下界最小流)
Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时 ...
- 【bzoj2502】清理雪道 有上下界最小流
题目描述 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞 ...
- BZOJ 2502 清理雪道(有源汇上下界最小流)
题面 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机, ...
- BZOJ 2502 清理雪道/ Luogu P4843 清理雪道 (有源汇上下界最小流)
题意 有一个有向无环图,求最少的路径条数覆盖所有的边 分析 有源汇上下界最小流板题,直接放代码了,不会的看dalao博客:liu_runda 有点长,讲的很好,静心看一定能看懂 CODE #inclu ...
- BZOJ_2502_清理雪道_有源汇上下界最小流
BZOJ_2502_清理雪道_有源汇上下界最小流 Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道), ...
- BZOJ 2502: 清理雪道
BZOJ 2502: 清理雪道 标签(空格分隔): OI-BZOJ OI-最小流 OI-上下界网络流 Time Limit: 10 Sec Memory Limit: 128 MB Descripti ...
- BZOJ 1458 / Luogu P4311 士兵占领 (上下界最小流 / 直接最大流)
做法1:上下界最小流 先来一发上下界最小流,思路比较暴力,就是把行和列看作n+mn+mn+m个点,(i,j)(i,j)(i,j)如果能占领就从第iii行向第jjj列连一条边,上界为1下界为0;然后从s ...
- P4843 清理雪道(上下界网络流)
P4843 清理雪道 上下界最小流 我们先搞一遍上下界可行流(转) 回忆上下界最大流的写法:在可行流的残量网络$s\ -\ t$上跑最大流,答案为可行流$+$残量网络的最大流 那么上下界最小流的写法呢 ...
随机推荐
- vuex组件 vuex-persistedstate
vuex用于管理项目中的全局状态,但是我们一刷新vuex中保存的全局状态就会被全部初始化,虽然我们也可以同事缓存到storage中做两步操作,但是vuex-persistedstate组件已经帮我们完 ...
- 强化记忆之php
php 输出的区分 新手摸索道路,有说不对的地方,还请多多包涵. echo 能够输出一个以上的字符串,也能输出html标签 print 一次只能接受一个字符串(区分与echo),也能输出html标签 ...
- TP5部署服务器问题总结
及最近部署TP5遇到了很多坑,各种环境下都会出现一些问题,下面是我记录的排坑之路 先说最简单的lnmp一键安装包,我用的是1.5稳定版 安装命令:wget http://soft.vpser.net/ ...
- git上下载的thinkphp框架报错解决方法
git上下载的thinkphp5框架使用.gitignore没上传依赖,需要通过composer进行下载依赖,使用composer install或者composer update即可解决.
- 一、Linux知识体系结构图
参考: https://blog.csdn.net/Swing_Liu/article/details/79202479
- django模型的字段查询
条件运算符 exact: 查判等 list=BookInfo.objects.filter(id__exact=1) 可简写为: list=BookInfo.objects.filter(id=1) ...
- 网络编程之socket的运用
一,socket用法 socket是什么 ? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐 ...
- [转]Makefile中使用$$的使用
在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢,区别大了.不要认为在makefile的规则的命令行中使用$var就是将makefile的变量和s ...
- C#的委托Delegate
一.委托基础 1.什么是委托 委托(Delegate) 是存有对某个方法的引用的一种引用类型变量,用关键字delegate申明,实现相同返回值和参数的函数的动态调用,提供了对方法的抽象. 委托(Del ...
- LI 标签中让文章标题左对齐,日期右对齐的方法
希望实现标题在左对齐,日期在右对齐,当直接给日期的span加上float:right时,IE8和FF都OK,但IE6/7则会换行,下面给出一个简单有效的解决办法. <!DOCTYPE html ...