1934: [Shoi2007]Vote 善意的投票

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 1205  Solved: 746
[Submit][Status][Discuss]

Description

幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉。对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神。虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票。我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数。 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小?

Input

第一行只有两个整数n,m,保证有2≤n≤300,1≤m≤n(n-1)/2。其中n代表总人数,m代表好朋友的对数。文件第二行有n个整数,第i个整数代表第i个小朋友的意愿,当它为1时表示同意睡觉,当它为0时表示反对睡觉。接下来文件还有m行,每行有两个整数i,j。表示i,j是一对好朋友,我们保证任何两对i,j不会重复。

Output

只需要输出一个整数,即可能的最小冲突数。

Sample Input

3 3
1 0 0
1 2
1 3
3 2

Sample Output

1

HINT

在第一个例子中,所有小朋友都投赞成票就能得到最优解

Source

Day2

最小割。

如果x属于s集表示赞同,否则不赞同。

因此如果原本赞同,那么s到x连流量为1的边,x到t连流量为0的边:

表示如果让他不赞同,要产生1的代价。

朋友意见不同要产生1的代价,那么在图中表示为如果两个人属于不同集合要产生1的代价,那么x->y,y->x分别连流量为1的边。

答案就是最小割。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#define M 300+5
#define inf 0x3f3f3f3f
using namespace std;
queue<int> q;
int n,m,tot=1,h[M],cur[M],v[M],d[M],s,t;
struct edge
{int from,to,cap,flow,ne;
}E[200005];
void Addedge(int from,int to,int cap)
{E[++tot]=(edge){from,to,cap,0,h[from]};h[from]=tot;E[++tot]=(edge){to,from,0,0,h[to]};h[to]=tot;
}
bool bfs()
{for (int i=s;i<=t;i++)v[i]=0;d[s]=0,q.push(s);while (!q.empty()){int x=q.front();q.pop();for (int i=h[x];i;i=E[i].ne){edge e=E[i];if (!v[e.to]&&e.cap>e.flow){d[e.to]=d[x]+1;v[e.to]=1;q.push(e.to);}}}return v[t];
}
int dfs(int x,int a)
{if (x==t||!a) return a;int flow=0;for (int &i=cur[x];i;i=E[i].ne){edge &e=E[i];if (d[e.to]!=d[x]+1) continue;int f=dfs(e.to,min(a,e.cap-e.flow));if (f){e.flow+=f;E[i^1].flow-=f;flow+=f;a-=f;if (!a) break;}}return flow;
}
int dinic()
{int flow=0;while (bfs()){for (int i=s;i<=t;i++)cur[i]=h[i];flow+=dfs(s,inf);}return flow;
}
int main()
{scanf("%d%d",&n,&m);s=0,t=n+1;for (int i=1;i<=n;i++){int x;scanf("%d",&x);Addedge(s,i,x);Addedge(i,t,x^1);}for (int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);Addedge(x,y,1);Addedge(y,x,1);}cout<<dinic()<<endl;return 0;
}

感悟:

两个点属于不同集合要产生代价时,他们直接连上两条边

【BZOJ 1934】 [Shoi2007]Vote 善意的投票相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. mini2440 SD卡烧写系统
  2. python3.7安装numpy模块-Python3.7模块numpy
  3. redis 永不过期 java_死磕 Java
  4. vim显示行号、语法高亮、自动缩进的设置
  5. mysql在表的某一位置增加一列、删除一列、修改列名
  6. 浅谈电商网站开发中用户会话管理机制的设计和实现原理
  7. 美国“四院院士”特伦斯谈人工智能“瓶颈”:远未达极限,数学家已经有了实现AI可解释性的理论工具...
  8. Redis哈希数详解
  9. PREEMPT_RT 3.18.136 实时时延评估
  10. flutter优缺点_混合开发框架最全对比,为什么我更推荐Flutter?
  11. PLC编程系统的使用经验分享
  12. Chrome(谷歌浏览器)插件资料 !
  13. 安装算量软件使用_鹏业安装算量软件常用按钮汇总(三)
  14. java浏览 下单界面_Javaweb网上商城项目实战(24)实现订单详情查询功能
  15. 转载——visio密钥
  16. [剑指-Offer] 0. 《剑指-Offer》面试题题解汇总
  17. Python函数和面向对象,小白看了都说好
  18. 动态规划DP的概念与总结
  19. MinGW 环境变量的配置
  20. 迷幻的find函数用法

热门文章

  1. Qt获取本机IP、MAC地址、子网掩码、网卡名等函数设计
  2. 毫无表情的扑克脸——德扑10大基本攻守策略
  3. 什么样的程序猿适合去创业公司
  4. 函数式编程|python的函数式编程
  5. ArcGIS制图技巧:制图入门与点、线、面状符号制作
  6. 怎样搭建游戏服务器,传奇复古版手游是怎样搭建的,用云服务器架设游戏技术详细教程
  7. RecyclerView EditText 数据错乱问题
  8. MySQL InnoDB 表不存在问题修复
  9. 【ES】ES搜索结果中各个字段介绍,hits,took,timeout
  10. K8s9(2-1) k8s中的通信机制, kube-proxy的ipvs模式 ,无头服务,LoadBalancer,ExternalName,外部公有 ip(externalIPs)