P2057 [SHOI2007]善意的投票 最小割
题意大致就是有n个人有两种不同的意见并且有许多朋友,需要让朋友间尽可能的统一意见(少发生冲突),如果一个人违反自己的本意也算冲突,求最少的冲突。。。
很明显是最小割 跑最大流算出冲突数
两种意见可以看作源点S和T,我们需要做的是割最少的边使得S和T成为两个不同的集合,解释:割掉的边相当于1次冲突(因为若某边被割走,则显然这条边相连的两个点分别通向了S和T,所以算是一次冲突),当S和T还连通时则必然存在一条路径,这样肯定会有冲突,所以需要使得S和T孤立。
实现:
实现时这样建图:直接将S连向同意的人,T连向不同意的人,若两人是朋友,则在他们之间连一条双向边(这里有些人不理解:若两个人有冲突,则只需要其中任意一个人改变意见就行了,简单说是让a同意b的意见或者b同意a的意见,所以只需割掉一条边满足一种情况就可以了,但是有两种情况,所以建双向边)。最后就是求最小割了,直接套上最大流的模板就ok了。
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define pb push_back #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) // #define inf 0x3f3f3f3f const int N=4e6+44; const int M=4e6+54;struct edge {int to, next, w; } e[M << 1]; int head[N], cnt = 1; void add(int x, int y, int z) {e[++cnt] = (edge){y, head[x], z};head[x] = cnt;e[++cnt] = (edge){x, head[y], 0};head[y] = cnt; } int level[N]; bool bfs(int s, int t) {memset(level, 0, sizeof level);queue<int> q;level[s] = 1;q.push(s);while (!q.empty()) {int pos = q.front();q.pop();for (int i = head[pos]; i; i = e[i].next) {int nx = e[i].to;if (!e[i].w || level[nx]) continue;level[nx] = level[pos] + 1;q.push(nx);}}return level[t]; } int dfs(int s, int t, int flow) {if (s == t) return flow;int ret = 0;for (int i = head[s]; flow && i; i = e[i].next) {int nx = e[i].to;if (level[nx] == level[s] + 1 && e[i].w) {int tmp = dfs(nx, t, min(flow, e[i].w));e[i].w -= tmp;e[i ^ 1].w += tmp;flow -= tmp;ret += tmp;}}if (!ret) level[s] = 0;return ret; } int dinic(int s, int t) {int ret = 0;while (bfs(s, t)) ret += dfs(s, t, inf);return ret; } int n,m,s,t,sum; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; int id(int x,int y) {return (x-1)*m+y; } int main() {RII(n,m);s=n+1;t=s+1;rep(i,1,n){int x;RI(x);if(x==1)add(s,i,1);else add(i,t,1);}while(m--){int a,b;RII(a,b);add(a,b,1);add(b,a,1);}cout<<dinic(s,t); }
View Code
转载于:https://www.cnblogs.com/bxd123/p/10934713.html
P2057 [SHOI2007]善意的投票 最小割相关推荐
- P2057 [SHOI2007]善意的投票 (最大流最小割)
P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 最小割,两种意见可以看作源点S和T,我们需要做的是割最少的边使得S和T成为两个不同的集合,解释:割掉的边相当于1次冲突(因 ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- 洛谷 - P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查(最大流最小割)
题目链接:点击查看 题目大意:有 n 个人,每个人都有两种意见,且有许多朋友,需要让朋友之间的意见尽可能统一,问最少有多少冲突 题目分析:因为每个人有两种意见,所以分别将其与源点和汇点相连,因为最后可 ...
- bzoj1934 [Shoi2007]Vote 善意的投票 最小割
一上来容易想到缩点dp,但由于一个集合是没法用状态表示的,所以不能dp 然后就可以想到最小割,即通过割边和代价完成分配: 就比较好做了,默认选0就和0连边,默认选1就和1连边,朋友之间连边,如果在同一 ...
- [洛谷P2057][SHOI2007]善意的投票
题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友 ...
- [BZOJ1934][Shoi2007]Vote 善意的投票[最小割]
建图方式: S->同意 ,反对->T 对于每一对好友连容量为1的边 #include <bits/stdc++.h> using namespace std; const in ...
- SHOI2007善意的投票
水题 最小割问题 考察什么? 冲突. 这种题不是没有过啊 有一个就是激光打别人的就是利用这个思想(搞忘做题解了,结果没权限了WOC) 利用S-T表示若联通则依旧有冲突 把S表示赞成,T表示不赞成 赞成 ...
- 最大流,最小割刷题记录
T1 P2057 [SHOI2007] 善意的投票 题目 https://www.luogu.com.cn/blog/OnMyOwn/OnMyOwn https://www.luogu.com.cn/ ...
- bzoj 1934: [Shoi2007]Vote 善意的投票(最小割)
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1796 Solved: 1094 [Submit ...
最新文章
- 二代三代转录组测序分析实战班
- 图片上加动图怎么弄_用PS把千张图片拼成心爱的人的样子,只需三步!
- 在 C# 中,new 关键字可用作运算符、修饰符或约束。
- 使用Spring工厂模式管理多个类实现同一个接口
- centos 下 mysql 主从库搭建
- 50种奇妙装置玩法,将STEM教育一网打尽
- React脚手架学习笔记
- 大数据之-Hadoop完全分布式_完全分布式模式下的集群配置---大数据之hadoop工作笔记0034
- 第一周例行报告及作业汇总
- 深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
- steam显示连接至服务器时遇到问题,网吧steam在连接至steam服务器时遇到问题的处理办法...
- 12张图读懂模电、数电必备的电路基础知识
- 图片试卷怎么打印出来?
- 现有的 NFT 协议
- ORVIBO 精灵款升级分析
- Jetson NX Ubuntu 18.04下谷歌输入法候选框不显示解决办法
- memcpy越界引起的segment fault
- 华为云CDN是怎么为你的下载加速保驾护航
- 基于openmv的小车
- 藉由GZipStream的壓縮,來減少Web Service的傳輸量
热门文章
- springboot的起步依赖
- 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
- 【云快讯】《微软Sharepoint 2016 Beta版发布,强化混合云搜索功能》
- Unity3d读取.csv文件
- Java之开发工具(1) - Eclipse 如何设置注释的模板
- POJ 2449 Remmarguts' Date
- java 替换 rn_RN热更新之Android篇
- 全能直播王pc版_企鹅游戏直播助手v2.28.330.8-企鹅游戏直播助手PC版下载
- 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考
- 学习easyui疑问(二)