bzoj1934: [Shoi2007]Vote 善意的投票(显然最小割)
1934: [Shoi2007]Vote 善意的投票
题目:传送门
题解:
明显的不能再明显的最小割。。。
st连同意的,不同意的连ed
朋友之间两两连边(即双向边)
流量都为1...
为啥:
一个人只有两种选择...同意or不同意
那么如果选择违背了个人意愿那么肯定要割掉一条边(起冲突了嘛),那就是流量啊...
如果当前选择让两个盆友不在同一集合,那就产生了冲突,还是要割,还是流量啊...
一A美滋滋~
代码水一发:
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<algorithm>
- #define qread(x) x=read()
- using namespace std;
- inline int read()
- {
- int f=,x=;char ch;
- while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
- return f*x;
- }
- struct node
- {
- int x,y,c,next,other;
- }a[];int len,last[];
- int n,m,st,ed;
- void ins(int x,int y,int c)
- {
- int k1,k2;
- k1=++len;
- a[len].x=x;a[len].y=y;a[len].c=c;
- a[len].next=last[x];last[x]=len;
- k2=++len;
- a[len].x=y;a[len].y=x;a[len].c=;
- a[len].next=last[y];last[y]=len;
- a[k1].other=k2;
- a[k2].other=k1;
- }
- int list[],h[],head,tail;
- bool bt_h()
- {
- memset(h,,sizeof(h));h[st]=;
- list[]=st;head=;tail=;
- while(head!=tail)
- {
- int x=list[head];
- for(int k=last[x];k;k=a[k].next)
- {
- int y=a[k].y;
- if(h[y]== && a[k].c>)
- {
- h[y]=h[x]+;
- list[tail++]=y;
- }
- }
- head++;
- }
- if(h[ed]>)return true;
- return false;
- }
- int find_flow(int x,int flow)
- {
- if(x==ed)return flow;
- int s=,t;
- for(int k=last[x];k;k=a[k].next)
- {
- int y=a[k].y;
- if(h[y]==h[x]+ && a[k].c> && s<flow)
- {
- s+=t=find_flow(y,min(a[k].c,flow-s));
- a[k].c-=t;a[a[k].other].c+=t;
- }
- }
- if(s==)h[x]=;
- return s;
- }
- int main()
- {
- qread(n);qread(m);
- len=;memset(last,,sizeof(last));
- st=-;ed=st+;
- for(int i=;i<=n;i++)
- {
- int x;qread(x);
- if(x==)ins(st,i,);
- else ins(i,ed,);
- }
- for(int i=;i<=m;i++)
- {
- int x,y;
- qread(x);qread(y);
- ins(x,y,);
- ins(y,x,);
- }
- int ans=;
- while(bt_h())ans+=find_flow(st,);
- printf("%d\n",ans);
- return ;
- }
bzoj1934: [Shoi2007]Vote 善意的投票(显然最小割)的更多相关文章
- BZOJ1934 [Shoi2007]Vote 善意的投票 【最小割】
题目 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿 ...
- bzoj1934: [Shoi2007]Vote 善意的投票(最小割)
传送门 考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案 然后考虑朋友之间怎么办,我们令朋友之间连双向边.这样不管怎么割都能对应一种选择情况.那么还是求一个 ...
- [BZOJ1934][SHOI2007]Vote 善意的投票:最小割
分析 先讲一下连边方法: \(S\)向意愿同意的人,意愿反对的人向\(T\),朋友之间互相连(其实好像意愿不同的朋友之间互相连就可以了,嘛,不管了),容量均为\(1\). 最小割即为答案. 可以理解为 ...
- [bzoj1934/2768][Shoi2007]Vote 善意的投票_最小割
Vote 善意的投票 bzoj-1934 Shoi-2007 题目大意:题目链接. 注释:略. 想法: 这是最小割的一个比较基本的模型. 我们将所有当前同意的小朋友连向源点,边权为1.不容易的连向汇点 ...
- BZOJ 1934 [Shoi2007]Vote 善意的投票(最小割)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1934 [题目大意] 每个人对于投票都有自己原来的观点:1或者0, 他可以违背自己原来的 ...
- 2018.10.13 bzo1934: [Shoi2007]Vote 善意的投票(最小割)
传送门 最小割定义题. 按照题意建边就行了. 考虑把冲突变成把aaa选入不与自己匹配的集合所需要付出的代价. 然后跑最小割就行了. 代码: #include<bits/stdc++.h> ...
- bzoj 1934: [Shoi2007]Vote 善意的投票 (最小割)
原来是赞同的连源,原来是反对的连汇,然后是朋友的就连在一起,这样最小割就是割掉违背和谐的吧 type arr=record toward,next,cap:longint; end; const ma ...
- bzoj1934: [Shoi2007]Vote 善意的投票
最大流..建图方式都是玄学啊.. //Dinic是O(n2m)的. #include<cstdio> #include<cstring> #include<cctype& ...
- bzoj1934: [Shoi2007]Vote 善意的投票&&bzoj2768:[JLOI2010]冠军调查
get到新姿势,最小割=最大流,来个大佬的PPT 这道题的做法是将st和1的xpy连,0的xpy和ed连,xpy之间jy连双向边,然后呢答案就是最小割. #include<cstdio> ...
随机推荐
- HDU 4318 Contest 2
简单的一题,使用类DIJK的算法就可以了. #include <iostream> #include <cstdio> #include <queue> #incl ...
- ios中NSUserDefaults的使用方法
ios中NSUserDefaults的使用方法 NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存.恢复应用程序相关的偏好设置,配置数据等 ...
- 个人andriod实习小作品,个人联网笔记本
个人联网笔记本 个人信息:就读于燕大本科软件project专业 眼下大四; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将来从事算法工 ...
- iOS UI08_UITableView
(http://img.blog.csdn.net/20150808103801391) // // MainViewController.m // UI08_UITableView // // Cr ...
- [jzoj 4528] [GDOI2019模拟2019.3.26] 要换换名字 (最大权闭合子图)
题目链接: https://jzoj.net/senior/#contest/show/2683/0 题目: 题解: 不妨枚举一个点,让两颗树都以这个点为根,求联通块要么点数为$0$,要么包括根(即联 ...
- [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)
题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...
- 如何将MVC AREA中的某一个页设为起始页
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.Ignore ...
- JavaScript中Array方法总览
title: JavaScript中Array方法总览 toc: true date: 2018-10-13 12:48:14 push(x) 将x添加到数组最后,可添加多个值,返回数组长度.改变原数 ...
- Android eclipse 运行项目设置程序默认安装到SD卡
Android eclipse 运行项目设置程序默认安装到SD卡 1.在Android手机启用USB调试功能 2.在Windows系统中打开命令提示符(开始菜单,选择运行,输入cmd回车即可),使用 ...
- 简易Servlet计算器1.0
编写一个简易的Servlet计算器,暂时仅能实现 + - * / % 五种运算 jsp界面: <%@ page language="java" contentType=&qu ...