Luogu
类型:最小割
我们可以把两者不同的意见看做两个集合,两个集合中间有边连接。
一个st-cut(简称割cut)会把有向图的顶点分成两个不相交的集合,其中s在一个集合中,t在另外一个集合中。
这道题目就是让我们求最小割啦。
从S向喜欢睡觉的同学连边1
从不喜欢睡觉的小朋友向T连边1
然后朋友之间连双向边
最小割==最大流
求最大流即可。

#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring>
#define il inline
using namespace std;
const int inf=0x7fffffff;
const int maxm=110000;
int head[maxm],to[maxm*2],cap[maxm*2],net[maxm*2],deep[maxm],cnt=1;
il void add(int x,int y,int c){cnt++,to[cnt]=y,cap[cnt]=c,net[cnt]=head[x],head[x]=cnt;}
queue <int> dl;
int st[maxm],go[maxm];
il bool BFS(int s,int t)
{while(!dl.empty()) dl.pop();memset(deep,-1,sizeof(deep));dl.push(s),deep[s]=0;while(!dl.empty()){int x=dl.front();dl.pop();for(int i=head[x];i;i=net[i])if(cap[i]>0&&deep[to[i]]==-1)dl.push(to[i]),deep[to[i]]=deep[x]+1;}return deep[t]==-1?0:1;
}
int dfs(int now,int flow,int t)
{if(now==t) return flow;int w,used=0;for(int i=head[now];i;i=net[i]){int v=to[i];if(deep[v]==deep[now]+1&&cap[i]){w=dfs(v,min(flow-used,cap[i]),t);cap[i]-=w;cap[i^1]+=w;used+=w;if(used==flow) return flow;}}if(!used) deep[now]=-1;return used;
}
il int dinic(int s,int t)
{int maxflow=0;while(BFS(s,t)) maxflow+=dfs(s,inf,t);return maxflow;
}
inline void adx(int x,int y,int cax)
{add(x,y,cax),add(y,x,0);
}
il int read()
{int x=0,w=1;char ch=0;while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*w;
}
int main()
{int n=read(),m=read();int s=0,t=1000;for(int i=1,h;i<=n;i++)h=read(),h==1?adx(s,i,1):adx(i,t,1);for(int i=1,u,v;i<=m;i++)u=read(),v=read(),adx(u,v,1),adx(v,u,1);printf("%d\n",dinic(s,t));return 0;
}

[Luogu P2057] 善意的投票相关推荐

  1. 洛谷 P2057 善意的投票

    题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来 ...

  2. P2057 [SHOI2007]善意的投票 (最大流最小割)

    P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 最小割,两种意见可以看作源点S和T,我们需要做的是割最少的边使得S和T成为两个不同的集合,解释:割掉的边相当于1次冲突(因 ...

  3. 洛谷P2057 【SHOI2007】善意的投票

    洛谷P2057 [SHOI2007]善意的投票 题目链接 这道题是最小割的一个经典应用:划分集合. 题目的意思就是就是将所有的小朋友分为两个集合:同意睡觉和不同意睡觉的.不同的集合之间的边都要断开. ...

  4. 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割

    [BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...

  5. 【BZOJ1934】善意的投票(网络流)

    [BZOJ1934]善意的投票(网络流) 题面 Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己 ...

  6. 51nod Vote 善意的投票

    51nod2934 Vote 善意的投票 ☠2.02.02.0 秒 /// ☣262,144.0262,144.0262,144.0 KBKBKB /// ☢808080 分 /// ி555级题 注 ...

  7. 【BZOJ 1934】 [Shoi2007]Vote 善意的投票

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1205  Solved: 746 [Submit] ...

  8. bzoj 1934: [Shoi2007]Vote 善意的投票(最小割)

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1796  Solved: 1094 [Submit ...

  9. bzoj1934【shoi2007】Vote善意的投票

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1533  Solved: 942 [Submit] ...

最新文章

  1. GridView中如何实现checkbox 默认选中
  2. 苹果开年第一购!买下仅24名员工的AI音乐公司,可根据环境动态生成音乐
  3. python syntaxerror怎么解决-python中出现invalid syntax报错的几种原因
  4. TypeError: 'module' object is not callable 原因分析(python模块导入注意事项)
  5. Intel Realsense D435 在C/C++中表示的frame_set就是python中的frames?【wait_for_frames()】
  6. Cloudflare通过UnstoppableDomains添加对“.crypto”域名的支持
  7. JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别
  8. 收藏!MySQL 面试必须掌握的 8 个知识点!
  9. C# 使用摄像头拍照 支持Win7 64位
  10. android应用图标在哪修改器,手机应用图标修改器app
  11. android使用Vitamio实现视频播放大小屏流畅切换
  12. 会员营销中,数字会员模式如何打造差异化会员服务
  13. Linux摄像头驱动第一篇之虚拟摄像头驱动vivi.c
  14. JS push()方法
  15. java 基本语法
  16. Java 输出单双引号问题
  17. win10“任务栏图标取消固定,重启后又出现”解决办法
  18. Getting Real(推荐)
  19. mysql 中abs函数_Mysql常用函数
  20. 机械键盘(可编程键盘)无效、串键、连键问题解决偏方

热门文章

  1. 单行函数和多表查询 例题代码可复制
  2. 4.2 线性方程组有解判断
  3. 你的样子抖音版,架子鼓版
  4. Collection类和泛型
  5. SQL Server 2017无法启动,提示“系统找不到指定的文件”【虚拟机内安装的】
  6. 瑞萨单片USB设备使用
  7. php字体大小_php设置字体的方法
  8. apidoc的介绍和使用
  9. 打造“财务中台”,浪潮云ERP助推企业业财融合、强化管控
  10. ERP系统的八大主要功能模块