传送门

考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案

然后考虑朋友之间怎么办,我们令朋友之间连双向边。这样不管怎么割都能对应一种选择情况。那么还是求一个最小割就行了

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #define inf 0x3f3f3f3f
 7 using namespace std;
 8 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 9 char buf[1<<21],*p1=buf,*p2=buf;
10 inline int read(){
11     #define num ch-'0'
12     char ch;bool flag=0;int res;
13     while(!isdigit(ch=getc()))
14     (ch=='-')&&(flag=true);
15     for(res=num;isdigit(ch=getc());res=res*10+num);
16     (flag)&&(res=-res);
17     #undef num
18     return res;
19 }
20 const int N=5005,M=500005;
21 int head[N],Next[M],ver[M],edge[M],tot=1;
22 int S,T,dep[N],cur[N],n,m;
23 queue<int> q;
24 inline void add(int u,int v,int e){
25     ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
26     ver[++tot]=u,Next[tot]=head[v],head[v]=tot,edge[tot]=0;
27 }
28 bool bfs(){
29     memset(dep,-1,sizeof(dep));
30     while(!q.empty()) q.pop();
31     for(int i=S;i<=T;++i) cur[i]=head[i];
32     q.push(S),dep[S]=0;
33     while(!q.empty()){
34         int u=q.front();q.pop();
35         for(int i=head[u];i;i=Next[i]){
36             int v=ver[i];
37             if(dep[v]<0&&edge[i]){
38                 dep[v]=dep[u]+1,q.push(v);
39                 if(v==T) return true;
40             }
41         }
42     }
43     return false;
44 }
45 int dfs(int u,int limit){
46     if(u==T||!limit) return limit;
47     int flow=0,f;
48     for(int i=cur[u];i;cur[u]=i=Next[i]){
49         int v=ver[i];
50         if(dep[v]==dep[u]+1&&(f=dfs(v,min(limit,edge[i])))){
51             flow+=f,limit-=f;
52             edge[i]-=f,edge[i^1]+=f;
53             if(!limit) break;
54         }
55     }
56     if(!flow) dep[u]=-1;
57     return flow;
58 }
59 int dinic(){
60     int flow=0;
61     while(bfs()) flow+=dfs(S,inf);
62     return flow;
63 }
64 int main(){
65     //freopen("testdata.in","r",stdin);
66     n=read(),m=read(),S=0,T=n+1;
67     for(int i=1,k;i<=n;++i) k=read(),k&1?add(S,i,1):add(i,T,1);
68     for(int i=1;i<=m;++i){
69         int u=read(),v=read();add(u,v,1),add(v,u,1);
70     }
71     printf("%d\n",dinic());
72     return 0;
73 }

转载于:https://www.cnblogs.com/bztMinamoto/p/9579819.html

bzoj1934: [Shoi2007]Vote 善意的投票(最小割)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. P2057 [SHOI2007]善意的投票 最小割

    题意大致就是有n个人有两种不同的意见并且有许多朋友,需要让朋友间尽可能的统一意见(少发生冲突),如果一个人违反自己的本意也算冲突,求最少的冲突... 很明显是最小割   跑最大流算出冲突数 两种意见可 ...

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

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

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

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

最新文章

  1. Java基础:JavaNIO 之 内存映射文件原理
  2. sdut 2141 BFS(用邻接矩阵和邻接表(采用优先队列)实现
  3. android面试题总结加强版
  4. arima 数据预处理_时间序列分析|ARIMA模型分步骤解析及R中实践
  5. 程序员应对浏览器同源策略的姿势
  6. 2021高考成绩怎么查询时间北京,2021年北京高考成绩几号公布可以查询,查询时间安排...
  7. Autolayout的简单介绍和示例代码
  8. 空间留言工具_新房,拖把等清洁工具都放哪?
  9. SQL 中的 in 与 not in、exists 与 not exists 的区别以及性能分析
  10. MySQL某列增加标注_MySQL 使用CASE表达式给行做标记
  11. ATF(Arm Trusted Firmware)/TF-A Chapter 05 BL2
  12. 米字格图片可打印_练字本米字格模板可打印行楷书
  13. ubuntu常用功能安装集锦
  14. 计算机不能引导硬盘,联想电脑win10改win7后不能引导bios中找不到硬盘的解决教程...
  15. 读书百客:《十一月四日风雨大作》评赏
  16. 多核时代多线程编程(一)基本策略
  17. 【3D游戏建模全流程教学】在Maya中制作小岛模型
  18. 优秀产品经理必备的“十个证书”+项目管理工具
  19. 单片机进阶---PCB开发之照葫芦画瓢(一)
  20. 计算机硬件故障的表现,电脑硬件坏了,各会出现什么样的症状?如何检修?

热门文章

  1. 使用渐进式JPEG来提升用户体验
  2. spring配置数据库
  3. 软件生命周期管理研讨会有感
  4. 使用Spring.Net对Web页面进行依赖注入
  5. jSignature签名的用法,一文教会你(二)后台代码
  6. 异常在哪一层处理_WiFi速度慢,信号不稳定,除了重启路由器外,自己能怎么处理?...
  7. s丅7318是啥芯片_透彻解析LED驱动芯片HT1632C指令集与驱动编程
  8. 冯诺依曼机器人_冯·诺依曼型计算机的五大组成部分是什么?
  9. 计算机网络模拟校园,计算机网络课程设计-模拟校园网组网实验
  10. html中input、label、form、textarea、select