题意大致就是有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]善意的投票 最小割相关推荐

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

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

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

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

  3. 洛谷 - P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查(最大流最小割)

    题目链接:点击查看 题目大意:有 n 个人,每个人都有两种意见,且有许多朋友,需要让朋友之间的意见尽可能统一,问最少有多少冲突 题目分析:因为每个人有两种意见,所以分别将其与源点和汇点相连,因为最后可 ...

  4. bzoj1934 [Shoi2007]Vote 善意的投票 最小割

    一上来容易想到缩点dp,但由于一个集合是没法用状态表示的,所以不能dp 然后就可以想到最小割,即通过割边和代价完成分配: 就比较好做了,默认选0就和0连边,默认选1就和1连边,朋友之间连边,如果在同一 ...

  5. [洛谷P2057][SHOI2007]善意的投票

    题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友 ...

  6. [BZOJ1934][Shoi2007]Vote 善意的投票[最小割]

    建图方式: S->同意 ,反对->T 对于每一对好友连容量为1的边 #include <bits/stdc++.h> using namespace std; const in ...

  7. SHOI2007善意的投票

    水题 最小割问题 考察什么? 冲突. 这种题不是没有过啊 有一个就是激光打别人的就是利用这个思想(搞忘做题解了,结果没权限了WOC) 利用S-T表示若联通则依旧有冲突 把S表示赞成,T表示不赞成 赞成 ...

  8. 最大流,最小割刷题记录

    T1 P2057 [SHOI2007] 善意的投票 题目 https://www.luogu.com.cn/blog/OnMyOwn/OnMyOwn https://www.luogu.com.cn/ ...

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

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

最新文章

  1. 二代三代转录组测序分析实战班
  2. 图片上加动图怎么弄_用PS把千张图片拼成心爱的人的样子,只需三步!
  3. 在 C# 中,new 关键字可用作运算符、修饰符或约束。
  4. 使用Spring工厂模式管理多个类实现同一个接口
  5. centos 下 mysql 主从库搭建
  6. 50种奇妙装置玩法,将STEM教育一网打尽
  7. React脚手架学习笔记
  8. 大数据之-Hadoop完全分布式_完全分布式模式下的集群配置---大数据之hadoop工作笔记0034
  9. 第一周例行报告及作业汇总
  10. 深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
  11. steam显示连接至服务器时遇到问题,网吧steam在连接至steam服务器时遇到问题的处理办法...
  12. 12张图读懂模电、数电必备的电路基础知识
  13. 图片试卷怎么打印出来?
  14. 现有的 NFT 协议
  15. ORVIBO 精灵款升级分析
  16. Jetson NX Ubuntu 18.04下谷歌输入法候选框不显示解决办法
  17. memcpy越界引起的segment fault
  18. 华为云CDN是怎么为你的下载加速保驾护航
  19. 基于openmv的小车
  20. 藉由GZipStream的壓縮,來減少Web Service的傳輸量

热门文章

  1. springboot的起步依赖
  2. 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
  3. 【云快讯】《微软Sharepoint 2016 Beta版发布,强化混合云搜索功能》
  4. Unity3d读取.csv文件
  5. Java之开发工具(1) - Eclipse 如何设置注释的模板
  6. POJ 2449 Remmarguts' Date
  7. java 替换 rn_RN热更新之Android篇
  8. 全能直播王pc版_企鹅游戏直播助手v2.28.330.8-企鹅游戏直播助手PC版下载
  9. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考
  10. 学习easyui疑问(二)