[Luogu P2057] 善意的投票
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] 善意的投票相关推荐
- 洛谷 P2057 善意的投票
题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来 ...
- P2057 [SHOI2007]善意的投票 (最大流最小割)
P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 最小割,两种意见可以看作源点S和T,我们需要做的是割最少的边使得S和T成为两个不同的集合,解释:割掉的边相当于1次冲突(因 ...
- 洛谷P2057 【SHOI2007】善意的投票
洛谷P2057 [SHOI2007]善意的投票 题目链接 这道题是最小割的一个经典应用:划分集合. 题目的意思就是就是将所有的小朋友分为两个集合:同意睡觉和不同意睡觉的.不同的集合之间的边都要断开. ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- 【BZOJ1934】善意的投票(网络流)
[BZOJ1934]善意的投票(网络流) 题面 Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己 ...
- 51nod Vote 善意的投票
51nod2934 Vote 善意的投票 ☠2.02.02.0 秒 /// ☣262,144.0262,144.0262,144.0 KBKBKB /// ☢808080 分 /// ி555级题 注 ...
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1205 Solved: 746 [Submit] ...
- bzoj 1934: [Shoi2007]Vote 善意的投票(最小割)
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1796 Solved: 1094 [Submit ...
- bzoj1934【shoi2007】Vote善意的投票
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1533 Solved: 942 [Submit] ...
最新文章
- GridView中如何实现checkbox 默认选中
- 苹果开年第一购!买下仅24名员工的AI音乐公司,可根据环境动态生成音乐
- python syntaxerror怎么解决-python中出现invalid syntax报错的几种原因
- TypeError: 'module' object is not callable 原因分析(python模块导入注意事项)
- Intel Realsense D435 在C/C++中表示的frame_set就是python中的frames?【wait_for_frames()】
- Cloudflare通过UnstoppableDomains添加对“.crypto”域名的支持
- JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别
- 收藏!MySQL 面试必须掌握的 8 个知识点!
- C# 使用摄像头拍照 支持Win7 64位
- android应用图标在哪修改器,手机应用图标修改器app
- android使用Vitamio实现视频播放大小屏流畅切换
- 会员营销中,数字会员模式如何打造差异化会员服务
- Linux摄像头驱动第一篇之虚拟摄像头驱动vivi.c
- JS push()方法
- java 基本语法
- Java 输出单双引号问题
- win10“任务栏图标取消固定,重启后又出现”解决办法
- Getting Real(推荐)
- mysql 中abs函数_Mysql常用函数
- 机械键盘(可编程键盘)无效、串键、连键问题解决偏方