题目链接

BZ链接

又是一道玄学的网络流题

我们这样建图:

对于同意观点1的原点向其连边,对于同一观点2点向汇点连边

然后如果两个人是朋友,就连一条双向边。

为什么这样是对的呢?

对于一个人来说,他要么放弃自己的观点,就是断掉自己和原点或汇点的边

或者说他放弃他的朋友(太表面了)断掉和他朋友相连的边

最后要使原点和汇点不连通(因为一个人不可能同意两个观点),所以我们要求的就是一个最小割

跑最大流的板子就好了

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<algorithm>
  4. # include<cstring>
  5. # include<cmath>
  6. # include<queue>
  7. using namespace std;
  8. const int inf = 0x3f3f3f3f;
  9. const int mn = ;
  10. int head[mn],edge_max=;
  11. struct edge{int to,next,flow;
  12. };
  13. edge e[mn*mn*];
  14. int n,m;
  15. void add_edge(int x,int y,int z)
  16. {
  17. e[++edge_max].to=y;
  18. e[edge_max].next=head[x];
  19. e[edge_max].flow=z;
  20. head[x]=edge_max;
  21. }
  22. void add(int x,int y,int z)
  23. {
  24. add_edge(x,y,z);
  25. add_edge(y,x,);
  26. }
  27. queue<int> q;
  28. int deep[mn];
  29. bool bfs(int x,int y)
  30. {
  31. memset(deep,,sizeof(deep));
  32. q.push(x);
  33. deep[x]=;
  34. while(!q.empty())
  35. {
  36. int u=q.front();
  37. q.pop();
  38. for(int i=head[u];i;i=e[i].next)
  39. {
  40. if(e[i].flow> && deep[e[i].to]==)
  41. {
  42. deep[e[i].to]=deep[u]+;
  43. q.push(e[i].to);
  44. }
  45. }
  46. }
  47. return deep[y]!=;
  48. }
  49. int dfs(int x,int cost,int y)
  50. {
  51. if(x==y) return cost;
  52. for(int i=head[x];i;i=e[i].next)
  53. {
  54. if(deep[e[i].to]==deep[x]+ && e[i].flow>)
  55. {
  56. int di=dfs(e[i].to,min(cost,e[i].flow),y);
  57. if(di>)
  58. {
  59. e[i].flow-=di;
  60. e[i^].flow+=di;
  61. return di;
  62. }
  63. }
  64. }
  65. return ;
  66. }
  67. int dinic(int x,int y)
  68. {
  69. int ans=;
  70. while(bfs(x,y))
  71. {
  72. // printf("ssss\n");
  73. while(int k=dfs(x,inf,y))
  74. ans+=k;
  75. // printf("%d\n",ans);
  76. }
  77. return ans;
  78. }
  79. int main()
  80. {
  81. int st,en,x,y;
  82. scanf("%d%d",&n,&m);
  83. st=n+,en=n+;
  84. for(int i=;i<=n;i++)
  85. {
  86. scanf("%d",&x);
  87. if(x) {
  88. add(st,i,);
  89. //printf("%d %d\n",st,i);
  90. }
  91. else add(i,en,);
  92. }
  93. for(int i=;i<=m;i++)
  94. {
  95. scanf("%d%d",&x,&y);
  96. add(x,y,),add(y,x,);
  97. }
  98. printf("%d",dinic(st,en));
  99. return ;
  100. }

BZOJ 1934洛谷2057善意的投票题解的更多相关文章

  1. 洛谷 P2057 善意的投票(网络流最小割)

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

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

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

  3. 洛谷P2057 善意的投票

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

  4. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  5. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  6. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  7. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  8. 【洛谷2057】 [SHOI2007]善意的投票(最小割)

    传送门 洛谷 Solution 比较巧妙啊! 考虑这个只有同意和不统一两种,所以直接令\(s\)表示选,\(t\)表示不选,然后在朋友直接建双向边就好了. 代码实现 #include<bits/ ...

  9. bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格

    洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...

随机推荐

  1. 初学linux时遇到的那些哭笑不得的问题

    1.终端中无法输入密码? 在终端输入密码,是不会在输入密码的时候看见星号或者圆点符号的.它不会有任何输入密码的视觉指示,也不会有任何光标移动,什么也不显示. 其实是输进去了,只是没有明文显示出来而已. ...

  2. TZOJ 5986 玄武密码(AC自动机)

    描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们终于在 ...

  3. Leetcode448.Find All Numbers Disappeared in an Array找到所有数组中消失的数字

    给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不 ...

  4. 9.2专项测试-Android性能测试黑盒分析-1

    1. 专项测试 业务测试:面向新需求 回归测试:面向已交付需求 专项测试:面向非功能需求的各类质量唯独特征 表现 用户维度 技术维度 崩溃 crash,弱网 检测崩溃1.某个页面,因为研发处理不合适, ...

  5. Ubuntu18.04 + win10双系统下时间问题

    Ubuntu 16.04使用systemd启动之后,时间也改成了由timedatectl来管理 解决的办法可以参考http://blog.sina.com.cn/s/blog_5379c55b0102 ...

  6. import schedule ImportError: No module named schedule

    安装pip sudo apt-get install python-pip 安装schedule模块 pip install schedule PS: 如果已经安装pip,可能出现以下问题,按照提示重 ...

  7. HTTP_REFERER的用法及伪造

    引言 在php中,可以使用$_SERVER[‘HTTP_REFERER’]来获取HTTP_REFERER信息,关于HTTP_REFERER,php文档中的描述如下: “引导用户代理到当前页的前一页的地 ...

  8. LintCode_41 最大子数组

    题目 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 注意事项 子数组最少包含一个数 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1] ...

  9. “微信小程序” js部分注解

    1.小程序不提供获取dom的操作,而是让我们直接将事件绑定写入到组件内.区别在于bind不阻止冒泡,而catch阻止冒泡. <view id="tapTest" bindta ...

  10. angular和vue的对比学习之路

    vue-ng 打开vue的中文官网一段关于vue的描述 HTML 模板 + JSON 数据,再创建一个 Vue 实例,就这么简单. 那我么再看下angular中文网 AngularJS是为了克服HTM ...