题目链接:

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 善意的投票 题解相关推荐

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

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

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

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

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

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

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

    来自FallDream的博客,未经允许,请勿转载,谢谢. 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为 ...

  5. bzoj1934: [Shoi2007]Vote 善意的投票(最小割)

    传送门 考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案 然后考虑朋友之间怎么办,我们令朋友之间连双向边.这样不管怎么割都能对应一种选择情况.那么还是求一个 ...

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

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

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

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

  8. 1934: [Shoi2007]Vote 善意的投票

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

  9. ●BZOJ 1934 [Shoi2007]Vote 善意的投票

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1934 题解: 题目有点迷. S向为1的点连边,为0的点向T连边, 在有关系的两个点之间连双向 ...

  10. BZOJ 1934: [Shoi2007]Vote 善意的投票

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1934 求图的最小割=求一下图的最大流. #include <iostream> ...

最新文章

  1. mysql limit offset
  2. MHA选择主库源码解析
  3. OSI模型数据链路层为什么需要分层?
  4. 数据结构与算法--翻转单词顺序
  5. 女生做产品经理好吗_产品经理如何做产品架构设计
  6. 10年前腾讯微信后台第一天提交的代码曝光;苹果App Store佣金抽成再做让步;TypeScript 4.1发布|极客头条...
  7. 冒泡排序代码_凡人能看懂的冒泡排序和快速排序(附动态图和代码详解))
  8. IAR平台下使用STM32的DSP配置方法
  9. FreeBSD11配置local_unbound做dns缓存和转发
  10. 新增Tao插件,Red Giant 经典特效插件 Trapcode Suite 13 for Win/Mac
  11. 计算机系统的用户分几类,计算机操作系统的几种分类方式
  12. ce修改植物大战僵尸之植物无冷却
  13. win7计算机的用户名和密码,win7文件共享访问需要输入用户名和密码如何解决
  14. 冬日魔幻之旅-seata+dubbo+nacos+springboot解决分布式事务的全网段唯一实践之作(上)
  15. C语言醉酒,驾驶人在道路上饮酒醉酒驾驶机动车处3年以上有期徒刑
  16. P3456 [POI2007]GRZ-Ridges and Valleys(bfs)
  17. Knockout.js学习笔记----绑定
  18. 深信服信锐 技术支持(网络工程师)
  19. PLUS模型教程1:认识PLUS模型
  20. 带目录计算机专业论文,计算机专业论文格式及目录系统

热门文章

  1. python-enurmate
  2. AttributeError: ‘Polygon‘ object has no property ‘normed‘
  3. JSP教程第7、8讲笔记
  4. 共阳极数码管显示c语言,基于74HC595单片机驱动数码管设计
  5. 彻底解决navicat连接mysql报错:1251Client does not support authentication protocol requested by server......
  6. python和Java实现斐波那契Fibonacci数列
  7. 非递归中序遍历---算法导论12.1-3
  8. C++ std::condition_variable wait() wait_for() 区别 怎么用 实例
  9. Docker Daemon和Docker Client关系
  10. Kubernetes 小白学习笔记(6)--kubernetes的架构与组件-Master组件