题目链接:

https://www.luogu.org/problemnew/show/P2057

分析:

由0和1的选择我们直觉的想到0与S一堆,1与T一堆。

但是发现,刚开始的主意并不一定是最终的结果。

于是用源点S表示最终选择0的集合。

汇点T表示最终选择1的集合。

如果一个人P选择了0,那么S−>PS->PS−>P连一条流量为1的边,然后P−>TP->TP−>T连一条流量为0的边。

反之如果P选择了1,那么S−>PS->PS−>P连一条流量为0的边,然后P−>TP->TP−>T连一条流量为1的边。

最后把所有朋友对之间连流量为1的双向边(关系相互)

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#define inf 0x7fffffff
using namespace std;
int s,t,ans;
int d[505];
struct edge
{int to,val,rev;edge(int _to,int _val,int _rev){to=_to;val=_val;rev=_rev;}
};
vector<edge>e[505];
void add(int x,int y,int w)
{e[x].push_back(edge(y,w,e[y].size()));e[y].push_back(edge(x,0,e[x].size()-1));
}
bool bfs()
{queue<int>q; memset(d,-1,sizeof(d));d[s]=0;q.push(s);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<e[x].size();i++){int y=e[x][i].to;if(d[y]==-1&&e[x][i].val){q.push(y);d[y]=d[x]+1;}}} if(d[t]==-1)return 0;return 1;
}
int dfs(int x,int low)
{if(x==t || low==0)return low;int totflow=0; for(int i=0;i<e[x].size();i++){int y=e[x][i].to;int rev=e[x][i].rev;if(d[y]==d[x]+1 && e[x][i].val){int a=dfs(y,min(low,e[x][i].val)); e[x][i].val-=a;e[y][rev].val+=a;low-=a;totflow+=a;if(low==0) return totflow;}}if(low!=0) d[x]=-1;return totflow;
}void dinic()
{while(bfs()){//printf("%d\n",ans); ans+=dfs(s,inf); }
}
int main()
{int n,m,x,y,o;scanf("%d%d",&n,&m);s=0;t=500;for(int i=1;i<=n;i++){scanf("%d",&o);if(o==0){add(s,i,1);//add(i,t,0);}else{//add(s,i,0);add(i,t,1);}}for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);add(x,y,1);add(y,x,1);}dinic();printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/ShineEternal/p/10834224.html

洛谷P2057 [SHOI2007]善意的投票 题解相关推荐

  1. [洛谷P2057][SHOI2007]善意的投票

    题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友 ...

  2. 洛谷 - P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查(最大流最小割)

    题目链接:点击查看 题目大意:有 n 个人,每个人都有两种意见,且有许多朋友,需要让朋友之间的意见尽可能统一,问最少有多少冲突 题目分析:因为每个人有两种意见,所以分别将其与源点和汇点相连,因为最后可 ...

  3. P2057 [SHOI2007]善意的投票 (最大流最小割)

    P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 最小割,两种意见可以看作源点S和T,我们需要做的是割最少的边使得S和T成为两个不同的集合,解释:割掉的边相当于1次冲突(因 ...

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

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

  5. 洛谷P2057 【SHOI2007】善意的投票

    洛谷P2057 [SHOI2007]善意的投票 题目链接 这道题是最小割的一个经典应用:划分集合. 题目的意思就是就是将所有的小朋友分为两个集合:同意睡觉和不同意睡觉的.不同的集合之间的边都要断开. ...

  6. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  7. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  8. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  9. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  10. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

最新文章

  1. IO流(六)之CharArrayReader类与CharArrayWriter类
  2. Hsiaoyang: Google与站点地图Sitemap
  3. OpenCV C++ 04 - Change Brightness
  4. c#中的long类型示例_C#中带示例的无符号字节数组
  5. java中Decimaformat_Java中 DecimalFormat 用法详解
  6. 信息学奥赛一本通(2029:【例4.15】水仙花数)
  7. Oracle数据库安装图解
  8. Bash、Terminal通过tab忽略大小写自动补全命令行提示
  9. 基于Node.js + WebSocket 的简易聊天室
  10. C#用正则表达式对IP进行排序
  11. 再谈System.arraycopy和Arrays.copyOf
  12. 【致远FAQ】致远OA启动不起来了(下集)
  13. 阿里巴巴电话面试(遭到了阿里的完虐,被一顿痛批)
  14. 如何远程控制Mac电脑(MacOS下远程控制详解)
  15. 可视化工具 roto 3t
  16. oracle耳机,新手耳机选购排行榜出炉,这三款耳机不仅做工精细,音质还能打
  17. vue 移动端音乐(3) amp;amp;gt;热门歌单推荐部分(webpack-dev-conf.js做后端接口代理+scroll插件)
  18. 华为fusion computer虚拟机存储数据恢复
  19. JavaWeb学习总结——JavaWEB_Servlet(尚硅谷_佟刚老师)
  20. xlrd和xlwt操作Excel文件

热门文章

  1. LINUX编译libusb
  2. doubango TURN Data Indication报文代码
  3. configure: error: Can‘t find ext2fs library
  4. 把一个byte高低位进行交换
  5. JS:如何正确绘制文字
  6. 2021-0413梦笔记
  7. cl.exe is unable to create an executable file. C compiler test failed.
  8. Python3不需要uuid:导入/usr/local/lib/python3.x/site-packages/uuid.py提示if not 0 time_low 32L错误
  9. 诚心劝言:自养动物不杀
  10. 错误解决:src/cpp/cuda.hpp:  fatal error: cuda.h