[bzoj1934]善意的投票
最小割,考虑最小割就是要将整张图分为两块,本题中就分别表示赞同和不赞同,那么首先一开始赞同的点向S连边,不赞同的点向T连边,如果这些点分到了另一边就要割掉这条边,朋友关系同理,连双向边同样表示分到两边要割掉这条边,跑最小割=最大流即可
- 1 #include<bits/stdc++.h>
- 2 using namespace std;
- 3 #define N 305
- 4 struct ji{
- 5 int nex,to,len;
- 6 }edge[N*N];
- 7 queue<int>q;
- 8 int E,n,m,x,y,head[N],work[N],d[N];
- 9 void add(int x,int y,int z){
- 10 edge[E].nex=head[x];
- 11 edge[E].to=y;
- 12 edge[E].len=z;
- 13 head[x]=E++;
- 14 if (E&1)add(y,x,0);
- 15 }
- 16 bool bfs(){
- 17 memset(d,-1,sizeof(d));
- 18 q.push(0);
- 19 d[0]=0;
- 20 while (!q.empty()){
- 21 int k=q.front();
- 22 q.pop();
- 23 for(int i=head[k];i!=-1;i=edge[i].nex)
- 24 if ((edge[i].len)&&(d[edge[i].to]<0)){
- 25 d[edge[i].to]=d[k]+1;
- 26 q.push(edge[i].to);
- 27 }
- 28 }
- 29 return d[n+1]>=0;
- 30 }
- 31 int dfs(int k,int s){
- 32 if (k>n)return s;
- 33 int p;
- 34 for(int &i=work[k];i!=-1;i=edge[i].nex)
- 35 if ((edge[i].len)&&(d[edge[i].to]==d[k]+1)){
- 36 p=dfs(edge[i].to,min(s,edge[i].len));
- 37 if (p){
- 38 edge[i].len-=p;
- 39 edge[i^1].len+=p;
- 40 return p;
- 41 }
- 42 }
- 43 return 0;
- 44 }
- 45 int main(){
- 46 scanf("%d%d",&n,&m);
- 47 memset(head,-1,sizeof(head));
- 48 for(int i=1;i<=n;i++){
- 49 scanf("%d",&x);
- 50 if (x)add(0,i,1);
- 51 else add(i,n+1,1);
- 52 }
- 53 for(int i=1;i<=m;i++){
- 54 scanf("%d%d",&x,&y);
- 55 add(x,y,1);
- 56 edge[E-1].len=1;
- 57 }
- 58 int ans=0;
- 59 while (bfs()){
- 60 memcpy(work,head,sizeof(head));
- 61 while (x=dfs(0,0x3f3f3f3f))ans+=x;
- 62 }
- 63 printf("%d",ans);
- 64 }
[bzoj1934]善意的投票的更多相关文章
- [洛谷P2057][bzoj1934]善意的投票(最大流)
题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来 ...
- 【BZOJ1934】善意的投票(网络流)
[BZOJ1934]善意的投票(网络流) 题面 Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己 ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- [bzoj1934/2768][Shoi2007]Vote 善意的投票_最小割
Vote 善意的投票 bzoj-1934 Shoi-2007 题目大意:题目链接. 注释:略. 想法: 这是最小割的一个比较基本的模型. 我们将所有当前同意的小朋友连向源点,边权为1.不容易的连向汇点 ...
- C++之路进阶——bzoj1934(善意的投票)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser hyxzc Logout 捐赠本站 Notice:由于本OJ建立在 ...
- BZOJ-1934 Vote 善意的投票 最大流+建图
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1551 Solved: 951 [Submit][S ...
- bzoj1934: [Shoi2007]Vote 善意的投票
最大流..建图方式都是玄学啊.. //Dinic是O(n2m)的. #include<cstdio> #include<cstring> #include<cctype& ...
- bzoj1934 Vote 善意的投票 最小割(最大匹配)
题目传送门 题目大意:很多小朋友,每个小朋友都有自己的立场,赞成或者反对,如果投了和自己立场不同的票会得到一个能量.又有很多朋友关系,如果一个人和他的一个朋友投的票不同,也会得到一个能量,现在问,通过 ...
- bzoj1934: [Shoi2007]Vote 善意的投票(显然最小割)
1934: [Shoi2007]Vote 善意的投票 题目:传送门 题解: 明显的不能再明显的最小割... st连同意的,不同意的连ed 朋友之间两两连边(即双向边) 流量都为1... 为啥: 一个人 ...
随机推荐
- react之组件数据挂在方式
1.属性(props) 组件间传值,在React中是通过只读属性 props 来完成数据传递的. props:接受任意的入参,并返回用于描述页面展示内容的 React 元素. import React ...
- 极简SpringBoot指南-Chapter02-Spring依赖注入的方式
仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...
- JavaScript有同步任务和异步任务,浏览器是怎么处理的?
1.在讨论浏览器与JavaScript之前,我们先来简单了解一下进程与线程 进程(process):资源分配的最小单位 进程是应用程序的执行实例,是操作系统进行资源分配和调度的一个独立单位. 线程(t ...
- Go语言核心36讲(Go语言基础知识四)--学习笔记
04 | 程序实体的那些事儿(上) 还记得吗?Go 语言中的程序实体包括变量.常量.函数.结构体和接口. Go 语言是静态类型的编程语言,所以我们在声明变量或常量的时候,都需要指定它们的类型,或者给予 ...
- Polya 定理 学习笔记
群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...
- 一文了解MySQL性能测试及调优中的死锁处理方法,你还看不明白?
一文了解MySQL性能测试及调优中的死锁处理方法,你还看不明白? 以下从死锁检测.死锁避免.死锁解决3个方面来探讨如何对MySQL死锁问题进行性能调优. 死锁检测 通过SQL语句查询锁表相关信息: ( ...
- Java泛型背后是什么?
文Java中泛型的应用,让大家更好地理解泛型,以及常说的泛型类型擦除是什么概念,举一个简单的例子,如下: 这里可以看出来在代码编写阶段就已经报错了,不能往string类型的集合中添加int类型的数据. ...
- TortoiseGit使用
TortoiseGit 前言: 其实作为一名学生,还未接触过企业级开发项目,基本都是一个人在本地敲代码,对于项目管理工具使用的并不多,最常用的命令也就是git clone了,hhh: 前些日子了解了一 ...
- [对对子队]事后总结Beta
设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 要做一个游戏,定义的很清楚,实现出来的效果贴近定义,对用户和场景有清晰描述 我们达到目标了么(原计划的功 ...
- [no code][scrum meeting] Alpha 1
项目 内容 会议时间 2020-04-06 会议主题 团队任务分析与拆解 会议时长 30min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalo ...