[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 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
随机推荐
- angular js 模拟获取后台的数据
在这里我们把后台的数据用一个.json文件进行代替. 项目的目录结构如下: puDongLibraryLearning----ui-router-learning ---- data-------pe ...
- deploy a ec2 and join into domain with terraform
Below is the example to convert the ps script into userdata for terraform to create instance and aut ...
- WebKit学习资源
1.http://blog.csdn.net/dlmu2001/article/category/741748 红心地瓜 2.http://blog.csdn.net/cnnzp/article ...
- [Book Content]Python进阶
python进阶 原书内容https://github.com/eastlakeside/interpy-zh 通过记录书本目录和大概内容做一个记录,方便以后回顾检索. Chapter Title B ...
- js实现快速排序的方法
因为面试面到了这个问题,所以写一下,加深印象,有两种方法 第一种是通过两个for循环,每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置,这个方法就是比较次数太多 ...
- JQuery如何监听DIV内容变化
这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...
- 【BZOJ3680】吊打xxx [模拟退火]
吊打XXX Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description gty又虐了一场比赛,被虐的蒟蒻 ...
- php 中foreach比for快之原因
这里首先要谈到php 的hashtabletypedef struct _hashtable { uint nTableSize; // hash Bucket的大小,最小为8,以2x增长. uint ...
- JGroups 初探
最近研究 JAVA 集群技术,看到 jgroups 这个框架,网上有些例子,非常简单.可以参考其官方网址:http://www.jgroups.org/manual/index.html按捺不住,自己 ...
- thinkphp 导入微信小程序加密解密库
第三方类库 第三方类库指除了 ThinkPHP 框架.应用项目类库之外的其他类库,一般由第三方系统或产品提供,如 Smarty.Zend 等系统的类库等. 前面使用自动加载或 import 方法导入的 ...