题目:

小Z在机房。他和其它机房同学都面临一个艰难的抉择,那就是 要不要划水?

每个人都有自己的一个意见,有的人想做题,有的人想划水。

当然,每个人只能选择一个事情做。如果一个人做的事情和他想做的不同,那么他会产生1不满意度。

更棘手的是,他们之间一些人是朋友,如果两人是朋友,但是他们做的事情不同,那么会有1不满意度产生。

小Z不想看到大家闹得不高兴,他想知道,不满意度最小能是多少?

输入/输出格式

第一行两个数字n,m 分别表示有n个人和m对朋友关系

第二行n个0/1,1表示想做题,0表示想划水。

然后是m行,每行两个数字a,b 表示a和b是朋友

输出只包含一个数字,表示最小的不满意度。

样例输入/输出

Input:

3 1

0 1 0

1 2

Output:

1

样例解释

每个人都做自己想做的事情,但是1和2不同,所以答案是1.

还有答案是1的其它方案,可以证明这是最小的不满意度。

数据范围与约定

      对于10%的数据,满足n<=10 m=10

对于30%的数据,满足n,m<=20

对于100%的数据,满足n<=300 m<=n*(n-1)/2

保证没有重复的朋友关系。

这题。。。网络流。。

根据最小割=最大流

网络流就是正解。。

那么怎么建图呢?

如果一个人想读书,那么从S到i连一条流量为1的边

否者从i到T连一条流量为1的边

如果有2个人是朋友。那么他们互相连一条流量为1的边。

很显然,如果2个朋友的选项不同,那么就会产生一条由S到T的通路。

那么我们求这道题的最小割即为本题答案

下面贴代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#define r register
#define inf 0x3f3f3f3f
using namespace std;
int n,m,num=;
int S,T;
struct edge{
int next,to,w;
}g[];
int que[];
int head[];
int lev[];
int iter[];
void ins(int u,int v,int w){g[++num].next=head[u];g[num].to=v;head[u]=num;g[num].w=w;}
void insw(int u,int v,int w){ins(u,v,w);ins(v,u,);}
bool bfs(){
memset(lev,-,sizeof(lev));
lev[S]=;
int h=,t=;
que[h]=S;
while(h<=t)
{
int tmp=que[h];
for(int i=head[tmp];i;i=g[i].next)
{
if(lev[g[i].to]==-&&g[i].w)
{
que[++t]=g[i].to;
lev[g[i].to]=lev[tmp]+;
}
}
h++;
}
return lev[T]!=-;
}
int dfs(int u,int v,int flow)
{
if(u==v) return flow;
r int used=;
for(r int i=head[u];i;i=g[i].next)
{
if(g[i].w&&lev[g[i].to]==lev[u]+)
{
r int fl=dfs(g[i].to,v,min(flow-used,g[i].w));
used+=fl;g[i].w-=fl;g[i^].w+=fl;
if(used==flow) return flow;
}
}
if(!used)lev[u]=-;
return used;
}
int dinic()
{
r int flow=;
while(bfs())
{
r int fl=dfs(S,T,inf);
while(fl)flow+=fl,fl=dfs(S,T,inf);
}
return flow;
}
int main(){
freopen("boat.in","r",stdin);
freopen("boat.out","w",stdout);
scanf("%d%d",&n,&m);
S=;T=n+;
r int x,y;
for(r int i=;i<=n;i++){scanf("%d",&x);if(x)insw(S,i,); else insw(i,T,);}
for(r int i=;i<=m;i++){scanf("%d%d",&x,&y);ins(x,y,);ins(y,x,);}
printf("%d",dinic());
return ;
fclose(stdin);
fclose(stdout);
}

小Z爱划水(NOIP信(sang)心(bin)赛)From FallDream的更多相关文章

  1. 小Z爱序列(NOIP信(sang)心(bin)赛)From FallDream(粗制单调队列&单调栈的算法解析)

    原题: 小Z最擅长解决序列问题啦,什么最长公共上升然后下降然后上升的子序列,小Z都是轻松解决的呢. 但是小Z不擅长出序列问题啊,所以它给了你一道签到题. 给定一个n个数的序列ai,你要求出满足下述条件 ...

  2. 【0521模拟赛】小Z爱划水

    题目描述 小Z和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同,那么他 ...

  3. 小Z爱图论(NOIP信(sang)心(bin)赛)From FallDream

    题目: 小Z最近喜欢上了图论,于是他研究了一下图的连通性问题.但是他遇到了一个难题. 给定一个n个点的有向图,求有多少点对(i,j)满足从i点出发能到达点j ? 小Z仅会简单的朴素算法,所以他想问问你 ...

  4. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  5. 【0521模拟赛】小Z爱数学

    题目描述 小Z想求F(n,k),F(n,k)表示n的所有因数pi中,满足n/pi <= k 的和. 小Z发现还是很水,所以他决定加大难度. 求 小Z还准备了很多个询问.现在你来解决一下吧. 输入 ...

  6. 2017-10-5模拟赛T2 小Z爱排序(sorting.*)

    Description Solution 比赛时找到了规律,但是没有证出来……(当然最后还是AC了……) 显然没有被操作的数在排好序的序列中一定是连续的一段. 所以,没有被操作的数一定从左到右连续地递 ...

  7. 【20170521校内模拟赛】热爱生活的小Z

    学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...

  8. 【BZOJ2038】【莫队】小z的袜子

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

随机推荐

  1. C语言字符篇(一)字符串转换函数

      #include <stdlib.h>   double atof(const char *nptr);  将字符串转换成双精度浮点数 int atoi(const char *npt ...

  2. Docker使用入门

    docker images 查看本地镜像 docker ps -a  查询容器 docker ps -l  查询最近使用容器 docker rm CONTAINER_ID 删除容器 docker rm ...

  3. 笔记-restful

    笔记-restful 1.      restful简介 restful:representational state transfer,简称REST,描述了一个架构样式的网络系统. 值得注意的是RE ...

  4. Hive环境搭建及基本操作

    伪分布式 一.安装及配置Hive 1.配置HADOOP_HOME和Hive conf 目录hive-env.sh # Set HADOOP_HOME to point to a specific ha ...

  5. JDBC---java与数据库中数据类型的对应关系

    基础数据类型 Java 类型 SQL 类型 int 或 java.lang.Integer INTEGER long 或 java.lang.Long BIGINT short 或 java.lang ...

  6. win32 signal

    Remarks   The signal function enables a process to choose one of several ways to handle an interrupt ...

  7. laravel5.5队列

    目录 简单实例 1. 简介和配置 1.1 好处 1.2 配置文件 1.3 队列驱动的必要配置 2. 创建任务 2.1 生成任务类 2.2 修改任务类 2.3 分发任务 2.4 自定义队列 & ...

  8. leetcode 【 Linked List Swap Nodes in Pairs 】 python 实现

    题目: Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ...

  9. 求 n的阶乘

    def chengji(n): if n == 0: return 1 return chengji(n-1)*nprint(chengji(n))

  10. PHP excel 设置参数

    $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(-1); <?php error_ ...