【题解】[SHOI2007]善意的投票 / [JLOI2010]冠军调查
\(\text{Solution:}\)
我们令源点和汇点分别为睡觉和不睡觉这两种互斥的决策点。把小朋友看成点,问题转化为最小割。
每一个小朋友对自己的意愿指向的汇点/源点。容量为\(1.\)之后要处理好朋友之间的关系。
让我们回到最小割的定义:求一组边,使它们割掉后,\(S,T\)不连通。
注意,这里只是不连通,而不是直接没有边相连。
于是,我们可以对每一对小朋友建立双向边,因为他们之间的关系是对称的。而我们把他们划分到两个集合种,只需要割掉双向边中的一条,它们就已经不连通了。
于是,这个问题被成功建模。
总结:深度清晰理解什么是最小割。注意仅仅是\(S,T\)不连通即可。不是割掉所有边。这题的边都表示的是一种关系,如\(A\to B\)的意义是\(A\)和\(B\)在同一立场。
我们的目的是将\(S,T\)分开以求到一组可行解。这组解最小的代价就是我们要求的最小冲突数。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=300010;
const int inf=(1<<30);
struct edge{
int nxt,to,flow;
}e[MAXN];
int n,m,head[MAXN],tot=1,S,T;
inline void add(int x,int y,int w){
e[++tot].to=y;e[tot].nxt=head[x];e[tot].flow=w;head[x]=tot;
e[++tot].to=x;e[tot].nxt=head[y];e[tot].flow=0;head[y]=tot;
}
int dep[MAXN],cur[MAXN];
bool bfs(int s,int t){
memset(dep,0,sizeof(dep));
queue<int>q;q.push(s);
dep[s]=1;cur[s]=head[s];
while(!q.empty()){
s=q.front();q.pop();
for(int i=head[s];i;i=e[i].nxt){
int j=e[i].to;
if(!dep[j]&&e[i].flow){
dep[j]=dep[s]+1;
cur[j]=head[j];
if(j==t)return true;
q.push(j);
}
}
}
return false;
}
int dfs(int s,int flow,int t){
if(s==t||flow<=0)return flow;
int rest=flow;
for(int i=head[s];i;i=e[i].nxt){
int j=e[i].to;
if(dep[j]==dep[s]+1&&e[i].flow){
int tmp=dfs(j,min(rest,e[i].flow),t);
if(tmp<=0)dep[j]=0;
rest-=tmp;e[i].flow-=tmp;e[i^1].flow+=tmp;
if(rest<=0)break;
}
}
return flow-rest;
}
int dinic(int s,int t){
int ans=0;
for(;bfs(s,t);)ans+=dfs(s,inf,t);
return ans;
}
int main(){
scanf("%d%d",&n,&m);
S=0;T=n+1;
for(int i=1;i<=n;++i){
int x;scanf("%d",&x);
if(x)add(S,i,1);
else add(i,T,1);
}
for(int i=1;i<=m;++i){
int x,y;
scanf("%d%d",&x,&y);
add(x,y,1);add(y,x,1);
}
printf("%d\n",dinic(S,T));
return 0;
}
【题解】[SHOI2007]善意的投票 / [JLOI2010]冠军调查的更多相关文章
- P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查
P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 拿来练网络流的qwq 思路:如果i不同意,连边(i,t,1),否则连边(s,i,1).好朋友x,y间连边(x,y,1)(y ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- BZOJ2768: [JLOI2010]冠军调查
2768: [JLOI2010]冠军调查 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 332[Submit][Status ...
- BZOJ 2768: [JLOI2010]冠军调查 最小割
2768: [JLOI2010]冠军调查 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2768 Description 一年一度的欧洲足 ...
- bzoj2768: [JLOI2010]冠军调查(双倍经验最小割)
2768: [JLOI2010]冠军调查 题目:传送门 题解: 双倍经验(1934) 代码: #include<cstdio> #include<cstring> #inclu ...
- 2768: [JLOI2010]冠军调查( 最小割 )
最小割... 怎么乱搞都可以 -------------------------------------------------------------------------------- #inc ...
- BZOJ-2768: [JLOI2010]冠军调查(超级裸的最小割)
2768: [JLOI2010]冠军调查 Time Limit: 10 Sec Memory Limit: 128 MB Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着 ...
- 洛谷 P2057 [SHOI2007]善意的投票 解题报告
P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
- P2057 [SHOI2007]善意的投票 (最大流)
题目 P2057 [SHOI2007]善意的投票 解析 网络流的建模都如此巧妙. 我们把同意的意见看做源点\(s\),不同意的意见看做汇点\(t\). 那我们\(s\)连向所有同意的人,\(t\)连向 ...
随机推荐
- mysql 8.0.11安装教程
安装环境:win7 1. 下载安装包 下载地址:https://dev.mysql.com/downloads/file/?id=476233 2. 解压zip包 3. 初始化my.ini 创建my. ...
- Unity可视化数据:创建图表
本文由Aoi翻译,转载请注明出处.文章来自于catlikecoding,原文作者介绍了Unity制作图表.可视化数据的方法.更多的名词解释内容,请点击末尾的“原文链接”查看. 介绍 这个教程里,我 ...
- Fragment的跳转
1. 设置主Fragment 其它fragment得到它就可以了. 1 val ft = fragmentManager?.beginTransaction() 2 val maiFrgmt = Ma ...
- JavaScript 时间都去那了(操作时间字符串加减时间)
---给时间充点时间吧--- 时间转换函数: function dateFormat(date, format) { date = new Date(date); var o = { 'M+': da ...
- C003:计算球体体积 自行输入球体半径
程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius; do{ pri ...
- AWD 第二弹
前言 小组第二次awd训练 万能密码登陆 首页发现一个登录界面,使用万能密码登陆 ' or 1=1#' 登陆成功后,发现Flag 任意文件上传 刚刚的后台界面存在上传按钮,可直接上传一句话木马 文件包 ...
- npm 报错 cb.apply is not a function
解决方法1 目录C:\Users(your username)\AppData\Roaming 有个npm文件夹 删除如果没有 npm cache文件cmd下运行 npm clean cache —f ...
- 【盗墓笔记】图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar
将一些项目中的一些独立功能打包成aar,不仅能于项目解耦,还能够提供给其它项目使用相同的功能,可谓是为项目开发带来了很大的便利.最近第一次做sdk,碰到一些问题,花了不少时间才解决,所以这里做一下简单 ...
- delphi DBgrid应用全书
在一个Dbgrid中显示多数据库 在数据库编程中,不必要也不可能将应用程序操作的所有数据库字段放入一个数据库文件中.正确的数据库结构应是:将数据库字段放入多个数据库文件,相关的数据库都包含一个唯 ...
- 5 分钟带你掌握 Makefile 分析
摘要:Makefile是一个名为GNU-Make软件所需要的脚本文件,该脚本文件可以指导Make软件控制arm-gcc等工具链去编译工程文件最终得到可执行文件,几乎所有的Linux发行版都内置了GNU ...