2768: [JLOI2010]冠军调查

Time Limit: 10 Sec  Memory Limit: 128 MB

Description

一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段。随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门。新浪体育最近在吉林教育学院进行了一次大规模的调查,调查的内容就是关于切尔西能否在今年问鼎欧洲冠军。新浪体育的记者从各个院系中一共抽取了n位同学作为参与者,大家齐聚一堂,各抒己见。每一位参与者都将发言,阐述自己的看法。参与者的心里都有一个看法,比如FireDancer认为切尔西不可能夺冠,而WaterDancer认为切尔西一定问鼎。但是因为WaterDancer是FireDancer的好朋友,所以可能FireDancer为了迁就自己的好朋友,会在发言中支持切尔西。也就是说每个参与者发言时阐述的看法不一定就是心里所想的。现在告诉你大家心里的想法和参与者的朋友网,希望你能安排每个人的发言内容,使得违心说话的人的总数与发言时立场不同的朋友(对)的总数的和最小。

Input

第一行两个整数n和m,其中n(2≤n≤300)表示参与者的总数,m(0≤m≤n(n-1)/2)表示朋友的总对数。
第二行n个整数,要么是0要么是1。如果第i个整数的值是0的话,表示第i个人心里认为切尔西将与冠军无缘,如果是1的话,表示他心里认为切尔西必将夺魁。
下面m行每行两个不同的整数,i和j(1≤i, j≤n)表示i和j是朋友。注意没有一对朋友会在输入中重复出现。朋友关系是双向的,并且不会传递。

Output

只有一个整数,为最小的和。

Sample Input

3 3
1 0 0
1 2
1 3
2 3

Sample Output

1

HINT

最好的安排是所有人都在发言时说切尔西不会夺冠。这样没有一对朋友的立场相左,只有第1个人他违心说了话。

最小割不解释。

/**************************************************************Problem: 2768User: winmtLanguage: C++Result: AcceptedTime:32 msMemory:3064 kb
****************************************************************/#include<iostream>
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<deque>
#include<utility>
#include<map>
#include<set>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<functional>
#include<sstream>
#include<cstring>
#include<bitset>
#include<stack>
using namespace std;int n,m,s,t,cnt=1,x,y,z;
struct sdt
{int cap,flow,u,v;
}e[90305];
int nxt[90305],fir[305],d[305],par[305],num[305],cur[305];
bool vis[305];int read()
{int x=0;char c=getchar();while(c<48||c>57)c=getchar();while(c>47&&c<58)x*=10,x+=c-48,c=getchar();return x;
}void add(int u,int v,int cp,int fl)
{e[++cnt].u=u;e[cnt].v=v;e[cnt].cap=cp;e[cnt].flow=fl;nxt[cnt]=fir[u];fir[u]=cnt;
}void bfs()
{//memset(vis,0,sizeof(vis));//memset(d,0,sizeof(d));queue<int>q;d[t]=0;vis[t]=1;q.push(t);while(!q.empty()){int k=q.front();q.pop();for(int i=fir[k];i;i=nxt[i]){if(!vis[e[i].v] && e[i].cap==0){vis[e[i].v]=1;d[e[i].v]=d[k]+1;q.push(e[i].v);}}}
}int agument()
{int p=t;int ans=2147483647;while(p!=s){ans=min(ans,e[par[p]].cap-e[par[p]].flow);p=e[par[p]].u;}p=t;while(p!=s){e[par[p]].flow+=ans;e[par[p]^1].flow-=ans;p=e[par[p]].u;}return ans;
}int isap()
{//memset(num,0,sizeof(num));int flow=0;for(int i=1;i<=t;i++){num[d[i]]++;cur[i]=fir[i];}int p=s;while(d[s]<t){if(p==t){flow+=agument();p=s;}bool ok=0;for(int i=cur[p];i;i=nxt[i]){if(e[i].cap>e[i].flow && d[p]==d[e[i].v]+1){  ok=1;  par[e[i].v]=i;  cur[p]=i;  p=e[i].v;  break;  }  }if(!ok){int mn=t-1;for(int i=fir[p];i;i=nxt[i]){if(e[i].cap>e[i].flow)mn=min(mn,d[e[i].v]);}if(--num[d[p]]==0)break;num[d[p]=mn+1]++;cur[p]=fir[p];if(p!=s)p=e[par[p]].u;}}return flow;
}int main()
{n=read();m=read();//memset(nxt,0,sizeof(nxt));//memset(fir,0,sizeof(fir));s=1;t=n+2;for(int i=1;i<=n;i++){z=read();if(z){add(s,i+1,1,0);add(i+1,s,0,0);}else{add(i+1,t,1,0);add(t,i+1,1,0);}}for(int i=1;i<=m;i++){x=read();y=read();add(1+x,1+y,1,0);add(y+1,x+1,1,0);}bfs();printf("%d\n",isap());return 0;
}

  

转载于:https://www.cnblogs.com/winmt/p/6272371.html

BZOJ-2768: [JLOI2010]冠军调查(超级裸的最小割)相关推荐

  1. BZOJ 2768 [JLOI2010]冠军调查

    还说还剩十分钟A一道水题,然后发现和善意的投票一模一样粘个代码过去直接A... 装作自己又写了一道题. 题面 //Twenty #include<cstdio> #include<c ...

  2. 【BZOJ2768】冠军调查,网络流之最小割

    Time:2016.07.19 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 按照赞成与反对组成二分图 分别向s,t连边,流量为1 意见不同的朋友连边,流量为1 跑出的最大流即为答 ...

  3. 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割

    [BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...

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

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

  5. bzoj 1412 [ZJOI2009]狼和羊的故事 最小割建图

    题面 题目传送门 解法 把\(S\)集看作和羊连接,\(T\)看作和狼连接 然后就转化成了基本的最小割模型了 对于0的处理,可以把它放在羊和狼两排点的中间,由\(S\rightarrow\)羊\(\r ...

  6. bzoj 3232: 圈地游戏【分数规划+最小割】

    数组开小导致TTTTTLE-- 是分数规划,设sm为所有格子价值和,二分出mid之后,用最小割来判断,也就是判断sm-dinic()>=0 这个最小割比较像最大权闭合子图,建图是s像所有点连流量 ...

  7. BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 1614  Solved: 789 [Subm ...

  8. bzoj 1934: [Shoi2007]Vote 善意的投票(最小割)

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

  9. BZOJ 1324: Exca王者之剑/BZOJ 1475: 方格取数 最大权独立集 最小割

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 618  Solved: 310 [Submit][Status][Di ...

  10. [bzoj 2768][bzoj 1877]

    传送门1 传送门1 Solution 两道比较裸的题... 复习一下最大流和费用流的模板. Code[bzoj 2768][JLOI 2010] 冠军调查 #include<bits/stdc+ ...

最新文章

  1. APP时代,市场选择是个技术活
  2. 【SURF+GTM】基于SURF特征提取,GTM去除错误配准点的图像匹配算法的MATLAB仿真
  3. .net对虚拟目录的操作
  4. 更新pcb封装导入_PCB设计│网表导入的雷区,你还在踩?
  5. 可变参数模板(参考《C++ Templates 英文版第二版》)
  6. MyBatis:模糊查询的4种实现方式
  7. java代码嵌入html代码是什么_用java给html文件添加必要的控制html代码片
  8. 三年无bug,提升代码质量的秘诀
  9. python 笔记 冒泡排序
  10. ipad文献管理软件_使用ipad看文献,有哪些好用的工具软件?
  11. python爬股票历史价格_【Python】利用ricequant获取上证指数以及所有股票历史价格数据...
  12. 前端主流框架Vue工作原理及特性你了解吗?
  13. php手机页面中文输出乱码,如何解决php输出中文乱码的问题?
  14. 基于 Layui form 组件的省市区级联的实现 - 组件化
  15. DAY7(DAY8拓展):Python基础及内置库介绍与使用(含例题)
  16. laravel学习笔记------使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理
  17. 微软 Visual Studio 2019 正式发布
  18. MATLAB多项式计算
  19. 返还delegation
  20. 基于C++控制台(Windows平台)的一个植物大战僵尸小游戏

热门文章

  1. 三列自适应布局(圣杯布局)
  2. 读取xml中的指定节点的值
  3. 一个示例让你明白界面与数据分离
  4. HTML5 网站大观:15个精美的 HTML5 作品集网站实例
  5. 浙商证券计算机组成原理,中国海洋大学计算机组成原理期末模拟参考答案.doc...
  6. 使用Intellij Idea生成可执行文件jar,转为exe文件步骤
  7. vue组件中传值遇到的一些问题
  8. for input string:是什么原因出现的_「汽车空调异味」周期性出现:原因是什么呢?...
  9. c++ log函数_第18节 函数的形参和实参-Web前端开发之Javascript-王唯
  10. springboot mongo查询固定字段_SpringBoot中文参考指南(2.1.6)32、使用 NoSQL 技术