[BZOJ 2768] 冠军调查
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2768
Solution:
一道比较基础的最大流的题目
一般看到将点分为两类的题目就要往网络流方向想吧
建图:
源点向每个初始立场为1的人连权值为1的边。
每个初始立场为0的人向汇点连权值为1的边。
好朋友之间互相连权值为1的边。
最小割即是答案。
要满足要求且总和最小,就不能让任何一对(1,0)关系成立,这便对应着最小割模型
割与源/汇点的边对应“说谎”,割二分图内部的边对应“立场不同”
Code:
//by NewErA
#include <bits/stdc++.h> using namespace std;
#define FF first
#define SS second
#define PB push_back
#define MP make_pair
#define bged(v) (v).begin(),(v).end()
#define foreach(it,s) for(__typeof((s).begin()) it=(s).begin();it!=(s).end();it++)
typedef long long ll;
typedef pair<int,int> P;
typedef pair<pair<int,int>,int> PP;
const int INF=<<;
const int MOD=1e9+;
//My IO system
struct fastio
{
char s[];
int it,len;
fastio(){it=len=;}
inline char get()
{
if(it<len)return s[it++];it=;
len=fread(s,,,stdin);
if(len==)return EOF;else return s[it++];
}
bool notend()
{
char c=get();
while(c==' '||c=='\n')c=get();
if(it>)it--;
return c!=EOF;
}
}_buff;
#define Read1(x) x=getnum()
#define Read2(x,y) Read1(x),Read1(y)
#define Read3(x,y,z) Read2(x,y),Read1(z)
#define Write1(x) putnum(x),putchar('\n')
#define Write2(x,y) Write1(x),Write1(y)
#define Write3(x,y,z) Write2(x,y),Write1(z)
inline ll getnum()
{
ll r=;bool ng=;char c;c=_buff.get();
while(c!='-'&&(c<''||c>''))c=_buff.get();
if(c=='-')ng=,c=_buff.get();
while(c>=''&&c<='')r=r*+c-'',c=_buff.get();
return ng?-r:r;
}
template<class T> inline void putnum(T x)
{
if(x<)putchar('-'),x=-x;
register short a[]={},sz=;
while(x)a[sz++]=x%,x/=;
if(sz==)putchar('');
for(int i=sz-;i>=;i--)putchar(''+a[i]);
} const int MAXN=;
int n,m,s,t,level[MAXN],iter[MAXN],dat[MAXN]; struct edge
{
int to,cap,rev;
};
vector<edge> a[MAXN]; void add_edge(int to,int from,int cap)
{
a[to].push_back(edge{from,cap,a[from].size()});
a[from].push_back(edge{to,cap,a[to].size()-});
} void bfs()
{
memset(level,-,sizeof(level));
queue<int> Q;Q.push(s);level[s]=;
while(!Q.empty())
{
int cur=Q.front();Q.pop();
for(int i=;i<a[cur].size();i++)
{
edge e=a[cur][i];
if(e.cap && level[e.to]==-)
{
level[e.to]=level[cur]+;
Q.push(e.to);
}
}
}
} int dfs(int v,int f)
{
if(v==t) return f;
int ret=;
for(int &i=iter[v];i<a[v].size();i++)
{
edge &e=a[v][i];
if(level[e.to]==level[v]+ && e.cap)
{
int d=dfs(e.to,min(f,e.cap));
f-=d;ret+=d;
e.cap-=d;a[e.to][e.rev].cap+=d;
if(!f) break;
}
}
return ret;
} int main()
{
Read2(n,m);s=n+,t=s+;
for(int i=;i<=n;i++)
{
Read1(dat[i]);
if(dat[i]) add_edge(i,t,);
else add_edge(s,i,);
}
for(int i=;i<=m;i++)
{
int x,y;Read2(x,y);
if(dat[x]!=dat[y]) add_edge(x,y,);
} ll res=;
while(true)
{
memset(iter,,sizeof(iter));
bfs();int f=;
if(level[t]<) break;
res+=dfs(s,INF);
}
cout << res;
return ;
}
Review:
很多时候碰到这样类似的二元关系就要往网络流方向想
割的边容量即为计入答案的数值
[BZOJ 2768] 冠军调查的更多相关文章
- BZOJ 2768 冠军调查(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2768 题意:给出一个无向图,每个点有一个值0或者1.现在重新设置每个点的值0或者1.设重 ...
- BZOJ 2768: [JLOI2010]冠军调查 最小割
2768: [JLOI2010]冠军调查 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2768 Description 一年一度的欧洲足 ...
- 【BZOJ】【2768】【JLOI2010】冠军调查
网络流/最小割 我不会告诉你这题跟 BZOJ 1934 是一模一样的……包括数据范围…… /****************************************************** ...
- 2768: [JLOI2010]冠军调查( 最小割 )
最小割... 怎么乱搞都可以 -------------------------------------------------------------------------------- #inc ...
- [bzoj 2768]&[bzoj 1877]
传送门1 传送门1 Solution 两道比较裸的题... 复习一下最大流和费用流的模板. Code[bzoj 2768][JLOI 2010] 冠军调查 #include<bits/stdc+ ...
- 【BZOJ-2768】冠军调查 最小割
2768: [JLOI2010]冠军调查 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 971 Solved: 661[Submit][Status ...
- BZOJ2768: [JLOI2010]冠军调查
2768: [JLOI2010]冠军调查 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 332[Submit][Status ...
- BZOJ-2768: [JLOI2010]冠军调查(超级裸的最小割)
2768: [JLOI2010]冠军调查 Time Limit: 10 Sec Memory Limit: 128 MB Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着 ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
随机推荐
- 免费的dns服务器(更换dns服务器有时可以解决某些网站(如爱奇艺访问不了的问题))
首先百度提供的dns就是非常好用的dns,小编就把百度的dns作为首选180.76.76.76. 其次是阿里提供的dns223.5.5.5,响应速度非常的快,而且没有广告劫持. 再就是最通用的 ...
- [NOI2002] 银河英雄传说 (带权并查集)
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
- wyh的物品~(二分)
链接:https://www.nowcoder.com/acm/contest/93/I来源:牛客网 题目描述 wyh学长现在手里有n个物品,这n个物品的重量和价值都告诉你,然后现在让你从中选取k个, ...
- wget下载HTTPS链接
wget -c -O master.zip --no-check-certificate https://github.com/mitsuhiko/flask/archive/master.zip # ...
- java获取mysql数据库表、字段、字段类型、字段注释
最近想要写一个根据数据库表结构生成实体.mapper接口.mapping映射文件.service类的简单代码生成工具,所以查阅了一些资料,怎样获取数据库的表.表中字段.字段类型.字段注释等信息. 最后 ...
- Web.xml过滤器配置及执行顺序概念
第一个过滤器 @Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain ch ...
- 【BZOJ1857】【SCOI2010】传送带 [三分]
传送带 Time Limit: 1 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 在一个2维平面上有两条传送带,每一条传送 ...
- 哈希Hash在字符串中的应用_C++
本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 哈希大家都会用撒,字符串显然都会写撒,那么哈希离散化字符串不就懂了?!(XXX的神逻辑,其实原文是:树都晓得吧,数组显然都会开呀,那么恭喜 ...
- maven的项目管理方面细节
1.1 Maven 1.依赖管理.jar包.工程之间的依赖. 2.项目构建.实现项目的一步构建. 3.工程聚合.工程继承.工程依赖. 1.2 Maven的工程类型: 1.war包工程 2. ...
- 《Java编程思想》笔记 第十四章 类型信息
1.RTTI:在运行时识别一个对象类型 JAVA在运行时 有时要 识别对象和类的信息这个机制叫RTTI.Java提供了两种机制去做这件事.传统的RTTI 和 反射. 传统的RTTI 假定编译时就已经 ...