1934: [Shoi2007]Vote 善意的投票

Time Limit: 1 Sec

Memory Limit: 256 MB

题目连接

http://www.lydsy.com/JudgeOnline/problem.php?id=1934

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

题意

题解:

网络流最小割

S连同意的,T连不同意的

然后朋友相互连接

代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<queue>
  4. #include<cmath>
  5. using namespace std;
  6. const int Ni = ;
  7. const int MAX = <<;
  8. struct Edge{
  9. int u,v,c;
  10. int next;
  11. }edge[*Ni];
  12. int n,m;
  13. int edn;//边数
  14. int p[Ni];//父亲
  15. int d[Ni];
  16. int sp,tp;//原点,汇点
  17.  
  18. void addedge(int u,int v,int c)
  19. {
  20. edge[edn].u=u; edge[edn].v=v; edge[edn].c=c;
  21. edge[edn].next=p[u]; p[u]=edn++;
  22.  
  23. edge[edn].u=v; edge[edn].v=u; edge[edn].c=;
  24. edge[edn].next=p[v]; p[v]=edn++;
  25. }
  26. int bfs()
  27. {
  28. queue <int> q;
  29. memset(d,-,sizeof(d));
  30. d[sp]=;
  31. q.push(sp);
  32. while(!q.empty())
  33. {
  34. int cur=q.front();
  35. q.pop();
  36. for(int i=p[cur];i!=-;i=edge[i].next)
  37. {
  38. int u=edge[i].v;
  39. if(d[u]==- && edge[i].c>)
  40. {
  41. d[u]=d[cur]+;
  42. q.push(u);
  43. }
  44. }
  45. }
  46. return d[tp] != -;
  47. }
  48. int dfs(int a,int b)
  49. {
  50. int r=;
  51. if(a==tp)return b;
  52. for(int i=p[a];i!=- && r<b;i=edge[i].next)
  53. {
  54. int u=edge[i].v;
  55. if(edge[i].c> && d[u]==d[a]+)
  56. {
  57. int x=min(edge[i].c,b-r);
  58. x=dfs(u,x);
  59. r+=x;
  60. edge[i].c-=x;
  61. edge[i^].c+=x;
  62. }
  63. }
  64. if(!r)d[a]=-;
  65. return r;
  66. }
  67.  
  68. int dinic(int sp,int tp)
  69. {
  70. int total=,t;
  71. while(bfs())
  72. {
  73. while(t=dfs(sp,MAX))
  74. total+=t;
  75. }
  76. return total;
  77. }
  78. int main()
  79. {
  80. int i,u,v,c;
  81. while(~scanf("%d%d",&n,&m))
  82. {
  83. edn=;//初始化
  84. memset(p,-,sizeof(p));
  85. sp=;tp=n+;
  86. for(int i=;i<=n;i++)
  87. {
  88. int x;
  89. scanf("%d",&x);
  90. if(x)addedge(sp,i,);
  91. else addedge(i,tp,);
  92. }
  93. for(int i=;i<=m;i++)
  94. {
  95. int x,y;
  96. scanf("%d%d",&x,&y);
  97. addedge(x,y,);
  98. addedge(y,x,);
  99. }
  100. printf("%d\n",dinic(sp,tp));
  101. }
  102. return ;
  103. }

BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割的更多相关文章

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

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下最小投票 1934: [Shoi2007]Vote 好心的投票 Time Limit: 1 Sec Memory L ...

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

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

  3. BZOJ 1934 [Shoi2007]Vote 善意的投票(最小割)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1934 [题目大意] 每个人对于投票都有自己原来的观点:1或者0, 他可以违背自己原来的 ...

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

    原来是赞同的连源,原来是反对的连汇,然后是朋友的就连在一起,这样最小割就是割掉违背和谐的吧 type arr=record toward,next,cap:longint; end; const ma ...

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

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

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

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

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

    #include<cstdio> #include<iostream> #define M 100000 #include<cstring> using names ...

  8. 【bzoj2768/bzoj1934】[JLOI2010]冠军调查/[Shoi2007]Vote 善意的投票 最小割

    bzoj2768 题目描述 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教育学院进行了一次大规模的调查,调查的内容就是关 ...

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

    一开始不太会,结果看完题解就是一个建图的网络流.然后就结了. 题干: 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人 ...

随机推荐

  1. Windows下Vim设置

    进入安装目录,找到_vimrc文件,用文本编辑器打开,在前面加入下述内容 设置中文支持 " 设置编码自动识别, 中文引号显示 " set fileencodings=utf-8,c ...

  2. Shell中判断字符串是否为数字的6种方法分享

    #!/bin/bash ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&a ...

  3. CodeForces Round #287 Div.2

    A. Amr and Music (贪心) 水题,没能秒切,略尴尬. #include <cstdio> #include <algorithm> using namespac ...

  4. spring+springMVC+JPA配置详解(使用缓存框架ehcache)

    SpringMVC是越来越火,自己也弄一个Spring+SpringMVC+JPA的简单框架. 1.搭建环境. 1)下载Spring3.1.2的发布包:Hibernate4.1.7的发布包(没有使用h ...

  5. 扩展Oracle表空间

    1. 查看当前表空间利用率SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)" ...

  6. JavaScript中定时器

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务. setTimeout() ...

  7. EF Code First 学习笔记:约定配置

    要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...

  8. ollydbg z

    通达信l2密码器方法: 1:使用Ollydbg,点文件,打开,选择通达信的可执行文件(或者把通达信的执行文件直接拖进Ollydbg的窗口),按F9运行程序. 2:正常使用通达信,进入到K线图后,在k线 ...

  9. gem install走代理,速度刚刚的

    有个树莓pi,安装了shadowsocks 和 cow ,做代理,走ipv6,学校不收ipv6流量钱.速度也不错,快的下载可达10M/s. gem install xx遇到墙了. nano ~/.ge ...

  10. 自己手写http服务器 http响应信息的封装与测试

    package cn.edu.sss.httpServer; import java.io.BufferedWriter; import java.io.IOException; import jav ...