题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1934

求图的最小割=求一下图的最大流。

#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>using namespace std;const int INF = 0x3f3f3f3f;
int cap[305][305],level[305],vis[305],a[305];
int maxFlow,minFlow,minFlowNode;
int N,M;   ///人数和关系数。
int S,T;   ///S表示赞成,T表示反对
bool bfs()  ///对图的节点进行分层
{queue<int>qu;memset(level,-1,sizeof(level));level[S] = 0;qu.push(S);while(!qu.empty()){int u = qu.front();qu.pop();for(int i = 0; i <= T; i++){if(level[i] == -1 && cap[u][i]>0){level[i] = level[u] + 1;if(i == T)return true;qu.push(i);}}}return false;
}
void dfs()
{int u,v,cur,i;deque<int>qu;     ///双端队列,可以当作栈来用memset(vis,0,sizeof(vis));vis[S] = 1;qu.push_back(S);while(!qu.empty()){cur = qu.back();if(cur == T){minFlow = INF+1;minFlowNode = S;for(i = 1; i < qu.size(); i++){u = qu[i-1];v = qu[i];if(cap[u][v]>0 && minFlow>cap[u][v]){minFlow = cap[u][v];minFlowNode = u;}}maxFlow += minFlow;for(i = 1; i < qu.size(); i++){u = qu[i-1];v = qu[i];cap[u][v] -= minFlow;cap[v][u] += minFlow;}while(!qu.empty() && qu.back() != minFlowNode){vis[qu.back()] = 0;qu.pop_back();}}else{for(i = 1; i <= T; i++){if(cap[cur][i] > 0 && level[i]==level[cur]+1 && vis[i]==0){vis[i] = 1;qu.push_back(i);break;}}if(i > T)qu.pop_back();}}
}
void dinic()
{maxFlow = 0;while(bfs()){dfs();}
}
int main()
{while(~scanf("%d%d",&N,&M)){memset(cap,0,sizeof(cap));int x,y;S = 0;T = N+1;for(int i = 1; i <= N; i++){scanf("%d",&x);if(x == 1)cap[S][i] = 1;elsecap[i][T] = 1;}for(int i = 1; i <= M; i++){scanf("%d%d",&x,&y);cap[x][y] = cap[y][x] = 1;}dinic();printf("%d\n",maxFlow);}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. 1934: [Shoi2007]Vote 善意的投票

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

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

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

  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. Forefront for OCS2007之部署
  2. python使用matplotlib可视化使用subplots子图、subplots绘制子图并为可视化的子图添加主标题(subplots main title)
  3. Shell脚本编写与应用
  4. python 提取字符串中的中文字符
  5. linux如何查看硬件驱动,linux查看硬件信息及驱动设备相关整理
  6. 201671030125+词频统计软件项目报告
  7. ssm使用全注解实现增删改查案例——EmpServiceImpl
  8. ecshop后台增加模板页的方法
  9. python 伪造源ip_Swaks伪造邮件
  10. Ubuntu ./configure 半途终止 导致没有生成makefile文件 解决方法
  11. java 跳表_跳表 skiplist
  12. 【Vegas原创】Exchange报550 5.7.1 Unable to relay for …错误的分析
  13. USB摄像头CMOS图像传感器PCB原理图
  14. 苹果电脑怎么读取ntfs磁盘?有哪些可以读取苹果电脑硬盘的软件?
  15. 免流解密之SAOML二开
  16. Docker-compose编排MySQL+Nacos+Seata
  17. 中台战略-第四章、企业中台5大成功要素
  18. 在网页中加入MSN、QQ以实现即时通讯
  19. Python基础学习视频
  20. 【node.js】nvm安装最新教程

热门文章

  1. 轻型载货汽车(离合器及传动轴设计)外文翻译
  2. Js逆向教程22-AST 抽象语法树babel安装
  3. CV领域Transformer之Self-Attention浅薄理解
  4. Eclipse上red5插件安装
  5. android显示通知图标大全,Android应用开发之android 桌面APP应用图标显示通知消息的数量显示与去除...
  6. 【USACO-Chapter1-1.3】【贪心】Barn Repair
  7. 身份证号码的规则及验证原理
  8. Spring 3.0 学习-环境搭建和三种形式访问
  9. 国开《医药商品营销实务》形考任务1 作业1 欧题库答案
  10. 为什么你学不会递归?告别递归,谈谈我的经验