[BZOJ1934/Luogu2057][SHOI2007]Vote 善意的投票 题解
题目链接:
BZOJ1934
Luogu2057
首先,看到求最小冲突以及这\(n\le 300\)的数据范围,很容易联想到最小割。
如何建图?
首先把人分成两份,意见为\(1\)的与源点连边,容量为\(1\),否则与汇点连边,容量也设为\(1\),表示更改自己意见的代价。
接着对每一对朋友之间连一条双向边,容量为\(1\),表示朋友之间的冲突。
最后求一遍最小割(最大流)即可。
这里用的\(Dinic\),时间复杂度\(O(n^3)\)
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>int n,m,St,Ed;
int Head[305],Next[200005],To[200005],Val[200005],En=1;
int Dep[305];inline void Add(int x,int y)
{Next[++En]=Head[x],To[Head[x]=En]=y,Val[En]=1;Next[++En]=Head[y],To[Head[y]=En]=x,Val[En]=0;
}bool BFS()
{std::queue<int> q;memset(Dep,0,sizeof Dep);Dep[St]=1,q.push(St);while(!q.empty()){int x=q.front(),y;q.pop();for(int i=Head[x];i;i=Next[i])if(Val[i]&&!Dep[y=To[i]]){Dep[y]=Dep[x]+1;if(y==Ed)return true;q.push(y);}}return false;
}int Dinic(int x,int Flow)
{if(x==Ed)return Flow;int k,Rest=Flow,y;for(int i=Head[x];i&&Rest;i=Next[i])if(Val[i]&&Dep[y=To[i]]==Dep[x]+1){k=Dinic(y,std::min(Rest,Val[i]));if(!k)Dep[y]=0;Val[i]-=k,Val[i^1]+=k,Rest-=k;}return Flow-Rest;
}int main()
{scanf("%d%d",&n,&m);St=n+1,Ed=n+2;for(int i=1,Sup;i<=n;++i){scanf("%d",&Sup);if(Sup)Add(St,i);else Add(i,Ed);}for(int x,y;m--;){scanf("%d%d",&x,&y);Add(x,y),Add(y,x);}int Maxf=0,Fs;while(BFS())while((Fs=Dinic(St,1<<30)))Maxf+=Fs;printf("%d\n",Maxf);return 0;
}
转载于:https://www.cnblogs.com/LanrTabe/p/10143402.html
[BZOJ1934/Luogu2057][SHOI2007]Vote 善意的投票 题解相关推荐
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- bzoj 1934: [Shoi2007]Vote 善意的投票(最小割)
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1796 Solved: 1094 [Submit ...
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1205 Solved: 746 [Submit] ...
- [bzoj1934][Shoi2007]Vote 善意的投票
来自FallDream的博客,未经允许,请勿转载,谢谢. 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为 ...
- bzoj1934: [Shoi2007]Vote 善意的投票(最小割)
传送门 考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案 然后考虑朋友之间怎么办,我们令朋友之间连双向边.这样不管怎么割都能对应一种选择情况.那么还是求一个 ...
- bzoj1934 [Shoi2007]Vote 善意的投票 最小割
一上来容易想到缩点dp,但由于一个集合是没法用状态表示的,所以不能dp 然后就可以想到最小割,即通过割边和代价完成分配: 就比较好做了,默认选0就和0连边,默认选1就和1连边,朋友之间连边,如果在同一 ...
- [BZOJ1934][Shoi2007]Vote 善意的投票[最小割]
建图方式: S->同意 ,反对->T 对于每一对好友连容量为1的边 #include <bits/stdc++.h> using namespace std; const in ...
- 1934: [Shoi2007]Vote 善意的投票
Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可 ...
- ●BZOJ 1934 [Shoi2007]Vote 善意的投票
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1934 题解: 题目有点迷. S向为1的点连边,为0的点向T连边, 在有关系的两个点之间连双向 ...
- BZOJ 1934: [Shoi2007]Vote 善意的投票
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1934 求图的最小割=求一下图的最大流. #include <iostream> ...
最新文章
- mysql limit offset
- MHA选择主库源码解析
- OSI模型数据链路层为什么需要分层?
- 数据结构与算法--翻转单词顺序
- 女生做产品经理好吗_产品经理如何做产品架构设计
- 10年前腾讯微信后台第一天提交的代码曝光;苹果App Store佣金抽成再做让步;TypeScript 4.1发布|极客头条...
- 冒泡排序代码_凡人能看懂的冒泡排序和快速排序(附动态图和代码详解))
- IAR平台下使用STM32的DSP配置方法
- FreeBSD11配置local_unbound做dns缓存和转发
- 新增Tao插件,Red Giant 经典特效插件 Trapcode Suite 13 for Win/Mac
- 计算机系统的用户分几类,计算机操作系统的几种分类方式
- ce修改植物大战僵尸之植物无冷却
- win7计算机的用户名和密码,win7文件共享访问需要输入用户名和密码如何解决
- 冬日魔幻之旅-seata+dubbo+nacos+springboot解决分布式事务的全网段唯一实践之作(上)
- C语言醉酒,驾驶人在道路上饮酒醉酒驾驶机动车处3年以上有期徒刑
- P3456 [POI2007]GRZ-Ridges and Valleys(bfs)
- Knockout.js学习笔记----绑定
- 深信服信锐 技术支持(网络工程师)
- PLUS模型教程1:认识PLUS模型
- 带目录计算机专业论文,计算机专业论文格式及目录系统
热门文章
- python-enurmate
- AttributeError: ‘Polygon‘ object has no property ‘normed‘
- JSP教程第7、8讲笔记
- 共阳极数码管显示c语言,基于74HC595单片机驱动数码管设计
- 彻底解决navicat连接mysql报错:1251Client does not support authentication protocol requested by server......
- python和Java实现斐波那契Fibonacci数列
- 非递归中序遍历---算法导论12.1-3
- C++ std::condition_variable wait() wait_for() 区别 怎么用 实例
- Docker Daemon和Docker Client关系
- Kubernetes 小白学习笔记(6)--kubernetes的架构与组件-Master组件