二者取其一,就是一堆物品,放入两个集合内,放进不同的集合内就会有不同的收益(或代价),使其收益(代价)最大(最小)的一种问题

通常这类问题,使用最小割定理解决。

最小割,即割边集中权值之和最小的一个集合

比如这道题[SHOI2007]善意的投票

是一道这样类型的题。

我们将\(S\)点设为同意睡觉的超级源点\(T\)设为不同意睡觉的点,同以对好朋友之间连一条容量为1的无向边,这样建图。我们求得一个最小割,就是答案的解了

不过这里有一个与其他网络流不同的地方,就是朋友间为什么要建立无向边,而不是有向边呢?

我们如此思考,假设a,b不统一意见。有两种决策,

  • 让a同意b

  • 让b同意a

有两种情况,我们并不能准确确定割边在哪个地方,所以我们需要建出两种情况的边来。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cstring>
using std::queue;
using std::min;
const int maxn=11000;
int n,m;
struct node
{int p;long long f;int nxt;
};
int head[maxn],tail=-1;
int dis[maxn];
int cur[maxn];
node line[maxn<<5];
void add(int a,int b,long long c)
{line[++tail].p=b;line[tail].f=c;line[tail].nxt=head[a];head[a]=tail;
}
bool bfs(int s,int t)
{queue<int>q;memset(dis,0,sizeof(dis));dis[s]=1;q.push(s);while(!q.empty()){int pas=q.front();q.pop();for(int i=head[pas];i!=-1;i=line[i].nxt)if(!dis[line[i].p]&&line[i].f){dis[line[i].p]=dis[pas]+1;q.push(line[i].p);}}return dis[t];
}
long long dfs(int now,int aim,long long flow)
{long long res=0,f;if(now==aim||!flow) return flow;for(int &i=cur[now];i!=-1;i=line[i].nxt)if(dis[line[i].p]==dis[now]+1&&(f=dfs(line[i].p,aim,min(flow,line[i].f)))){res+=f;flow-=f;line[i].f-=f;line[i^1].f+=f;if(!flow) break;}return res;
}
long long dinic(int s,int t)
{long long res=0;while(bfs(s,t)){for(int i=0;i<=n+1;i++)cur[i]=head[i];res+=dfs(s,t,0x7fffffff);}return res;
}
int main()
{memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);int a,b,c,d;int ans=0;for(int i=1;i<=n;i++){scanf("%d",&a);if(a)add(0,i,1),add(i,0,0);elseadd(i,n+1,1),add(n+1,i,0);ans+=1;}for(int i=1;i<=m;i++){scanf("%d%d",&a,&b);add(a,b,1);add(b,a,1);}printf("%d",dinic(0,n+1));
}

转载于:https://www.cnblogs.com/Lance1ot/p/9387604.html

二者取其一(初遇)_网络流相关推荐

  1. gitee 拉取其他分支_如何使用 Gitee 快速搭建 ESP-IDF 开发环境(Windows 版)

    前言 为更好地服务国内用户,构建中文需求沟通平台,帮助用户快速下载乐鑫开源代码,乐鑫将 GitHub 中的主要仓库(包含 ESP-IDF.ESP-ADF.ESP-MDF 以及阿里.腾讯.京东等国内云平 ...

  2. python爬取文章保存_爬取博主所有文章并保存到本地(.txt版)--python3.6

    闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...

  3. thymeleaf取model值_史上最详 Thymeleaf 使用教程

    点击上方"桌前明月",可以关注我偶. 前言 操作前建议先参考我的另一篇博客:玩转 SpringBoot 2 快速整合 | Thymeleaf 篇 查看如何在SpringBoot 中 ...

  4. 取本地数据_深入理解Kafka服务端之Follower副本如何同步Leader副本的数据

    一.场景分析Kafka采用的是主写主读的方式,即客户端的读写请求都由分区的Leader副本处理,那么Follower副本要想保证和Leader副本数据一致,就需要不断地从Leader副本拉取消息来进行 ...

  5. node爬取app数据_从零开始写一个node爬虫(上)—— 数据采集篇

    爬虫相信大家都知道,这里我们从一个空的文件夹开始,也来写一写我们自己的爬虫程序吧. github入口 下一篇--数据分析篇入口 爬虫毕竟涉及到数据的爬取,所以其实有一个道德的约束,那就是Robots协 ...

  6. c语言取余规则_这是我的C语言入门笔记

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来自:大鱼机器人 精彩回顾: [万字长文]C语言高效编程与代码优化,建议收藏![推荐] ...

  7. python爬取京东书籍_一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  8. python爬取歌曲教程_歌曲网站,教你爬取 mp3 和 lyric

    从歌曲网站,获取音频和歌词的流程: 1, 输入歌曲名,查找网站中存在的歌曲 id 2, 拿歌曲 id 下载歌词 lyric 简单的 url 拼接 3, 拿歌曲 id 下载音频 mp3 先用一个 POS ...

  9. python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址

    之前写<使用Python抓取m3u8加密视频>笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手. 今天看了回复,有同学想知道如何从视频网站上 ...

最新文章

  1. Android自动填充短信验证码
  2. TypeError系列之:TypeError: 'tuple' object does not support item assignment
  3. python学习-测试(文档测试 doctest、单元测试 unittest)
  4. Linux 串口编程二 深入了解 termios
  5. cocos2d-x学习之自动内存管理
  6. 如何写出有效的引流文案?
  7. Java 注解Annotation总结一
  8. hog特征提取python代码_80行Python实现-HOG梯度特征提取(转载)
  9. 浅谈软件项目中的需求分析与需求管理
  10. 【机器学习】python实现非线性回归(以中国1960-2014GDP为例)
  11. 以风景为主题的html,以风景为主题的英语作文
  12. java实现华氏温度和摄氏温度互相转换
  13. 技术方案|高精密划片机
  14. 计算机视觉研究新方向:自监督表示学习总结(建议收藏)
  15. kali 2020.3中安装pyrit无法定位软件包
  16. 数据结构实验二——队列(银行叫号系统)
  17. ZETA等物联网技术在新冠疫情防控中有哪些方面的应用?
  18. C++RTTI运算符
  19. 刷(shui)题记录 2021.12
  20. TinyBERT论文及代码详细解读

热门文章

  1. 使用eclipse编写JAVA程序
  2. matlab水印剪切攻击程序,可以运行的水印matlab程序(嵌入,提取,攻击测试等).doc
  3. 集合 Arrays.asList | java.lang.UnsupportedOperationException: null
  4. 网络广告推广浅析网站中的关键词密度要如何控制呢?
  5. 监管发文:规范大学生群体消费贷款,避免陷入消费贷款陷阱
  6. 如何优化移动端的网站排名?
  7. 网站内链优化中有哪些常见的形式?
  8. 如何对大量长尾关键词进行优化?
  9. linux shell概述,Linux学习 -- Shell基础 -- 概述
  10. java 三个参数的运算符,java – 三个参数运算符:局部变量可能尚未初始化