1163: [Baltic2008]Mafia
1163: [Baltic2008]Mafia
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 123 Solved: 70
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
5 3
2
4
8
3
10
1 5
1 2
2 4
4 5
2 3
3 4
Sample Output
HINT
Source
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL inf=0x3f3f3f3f;
const LL maxn=;
const LL maxm=;
struct Edge{
LL to;//这条边通向的点
LL rest;//这条变的权值
LL next;//与这条边相连的上一条边
};
Edge edge[maxn];//edge[i]代表一条有向边
LL head[maxm];
LL ecnt=;
inline void AddEdge(LL x,LL y,LL r){
edge[++ecnt].to=y; edge[ecnt].rest=r; edge[ecnt].next=head[x]; head[x]=ecnt;
edge[++ecnt].to=x; edge[ecnt].rest=; edge[ecnt].next=head[y]; head[y]=ecnt;
}
LL N,M,S,T;
LL dis[maxn]; inline bool BFS(){
memset(dis,,sizeof(dis));
dis[S]=;
static queue<LL> Q;
while(Q.size()>) Q.pop();
Q.push(S);
while(Q.size()>){
LL x=Q.front(); Q.pop();
for(LL e=head[x] ; e ; e=edge[e].next){//e表示的是边,不是点
LL d=edge[e].to;
if(edge[e].rest&&dis[d]==){//边权不为零且这条边通向的点的
dis[d]=dis[x]+;
Q.push(d);
if(d==T) return true;
}
}
}
return false;
} inline LL DFS(LL x,LL flow){
if(x==T) return flow;
LL now=,tmp;
for(LL e=head[x]; e ;e=edge[e].next){
if(edge[e].rest&&dis[edge[e].to]==dis[x]+){
tmp=DFS(edge[e].to,min(flow-now,edge[e].rest));
edge[e].rest-=tmp;
edge[e ^ ].rest+=tmp;
now+=tmp;
if(now==flow) return now;
}
}
return now;
}
inline LL dinic(){
LL ans=;
while(BFS()){
ans+=DFS(S,inf);
}
return ans;
}
LL money[maxn];
LL tot;
int main(){
cin>>N>>M;
cin>>S>>T;
T+=N;
for(LL i=;i<=N;i++){
LL v;
cin>>v;
AddEdge(i,i+N,v);
}
for(LL i=;i<=M;i++){
LL u,v;
cin>>u>>v;
AddEdge(u+N,v,inf);
AddEdge(v+N,u,inf);
}
cout<<dinic();
return ;
}
第二种:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL inf=0x3f3f3f3f;
const LL maxn=;
const LL maxm=;
struct Edge{
LL to;//这条边通向的点
LL rest;//这条变的权值
LL next;//与这条边相连的上一条边
};
Edge edge[maxm];//edge[i]代表一条有向边
LL head[maxm];
LL ecnt=;
inline void AddEdge(LL x,LL y,LL r){
edge[++ecnt].to=y; edge[ecnt].rest=r; edge[ecnt].next=head[x]; head[x]=ecnt;
edge[++ecnt].to=x; edge[ecnt].rest=; edge[ecnt].next=head[y]; head[y]=ecnt;
}
LL N,M,S,T;
LL dis[maxn]; inline bool BFS(){
memset(dis,,sizeof(dis));
dis[S]=;
static queue<LL> Q;
while(Q.size()>) Q.pop();
Q.push(S);
while(Q.size()>){
LL x=Q.front(); Q.pop();
for(LL e=head[x] ; e ; e=edge[e].next){//e表示的是边,不是点
LL d=edge[e].to;
if(edge[e].rest&&dis[d]==){//边权不为零且这条边通向的点的
dis[d]=dis[x]+;
Q.push(d);
if(d==T) return true;
}
}
}
return false;
} inline LL DFS(LL x,LL flow){
if(x==T) return flow;
LL now=,tmp;
for(LL e=head[x]; e ;e=edge[e].next){
if(edge[e].rest&&dis[edge[e].to]==dis[x]+){
tmp=DFS(edge[e].to,min(flow-now,edge[e].rest));
edge[e].rest-=tmp;
edge[e ^ ].rest+=tmp;
now+=tmp;
if(now==flow) return now;
}
}
return now;
}
inline LL dinic(){
LL ans=;
while(BFS()){
ans+=DFS(S,inf);
}
return ans;
}
LL money[maxn];
LL tot;
int main(){
cin>>N>>M;
cin>>S>>T;
for(LL i=;i<=N;i++) scanf("%d",&money[i]);
for(LL i=;i<=N;i++){
tot++;
AddEdge(tot,tot+,money[i]);
tot++;
}
for(LL i=;i<=M;i++){
LL r,l;
cin>>r>>l;
LL rr,ll;
rr=(r-)*+;//出点
ll=(l-)*+;//入点
AddEdge(rr,ll,inf);
ll++;
rr--;
AddEdge(ll,rr,inf);
}
S=(S-)*+;
T=(T-)*+;
cout<<dinic();
return ;
}
1163: [Baltic2008]Mafia的更多相关文章
- 1339 / 1163: [Baltic2008]Mafia
1163: [Baltic2008]Mafia Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 96 Solved: 60[Submit][Statu ...
- bzoj1339/1163:[Baltic2008]Mafia
传送门 最小割,割点,模板... 代码: #include<cstdio> #include<iostream> #include<algorithm> #incl ...
- [BZOJ1163][BZOJ1339][Baltic2008]Mafia
[BZOJ1163][BZOJ1339][Baltic2008]Mafia 试题描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用 ...
- bzoj1339[Baltic2008]Mafia*
bzoj1339[Baltic2008]Mafia 题意: 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控.对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得 ...
- BZOJ1163&BZOJ1339[Baltic2008]Mafia——最小割
题目描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警 方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标 ...
- [BZOJ1339] [Baltic2008] Mafia / 黑手党
Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价, 现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的 ...
- 【bzoj1163/bzoj1339】[Baltic2008]Mafia 网络流最小割
题目描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [BZOJ1163&1339]Mafia
[Baltic2008]Mafia 题目 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后, ...
随机推荐
- Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法
归并排序能够有两种思路----top-down 和 bottom-up top-down: 递归实现,将数组分成两半.分别处理.再合并. 伪代码例如以下: split ( A[], l, r) { i ...
- django用户认证系统——修改密码6
再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...
- CentOS 7安装与配置jdk-8u162
一.下载jdk-8u162版本 jdk-8u162-linux-x64.rpm 二.上传jdk到centos下 上传完后的文件如下,文件只有读写权限,没有执行权限 使用如下命令授权,如果文件已经有了执 ...
- 关于vs2013中包含目录,以及库目录配置相对路径的问题
记住一句话即可! 相对路径: 是相对于你的工程的*.vcxproj的路径!!!
- libevent(1)
很多时候,除了响应事件之外,应用还希望做一定的数据缓冲.比如说,写入数据的时候,通常的运行模式是: l 决定要向连接写入一些数据,把数据放入到缓冲区中 l 等待连接可以写入 l 写入尽量多的数据 l ...
- Webphere WAS 启动
如果WebSphere是默认安装的话,是自带两个profile,Dmgr和AppSrv,只需要到指定目录下启动管理器和节点即可/usr/IBM/WebSphere/AppServer/profiles ...
- html ; css ; javascript ; json ;
[说明]今天因为看到了前端的js页面和html页面,觉得有必要熟悉一下他们的基本语法,所以花了一天的时间去复习巩固了一下(之前学习过),包括html语法,css语法,javascript语法,对象.B ...
- 涨姿势UWP源码——IsolatedStorage
前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例. 和之前的Windows Runtime一样,UWP采用IsolatedStorage ...
- [Algorithms] Heap and Heapsort
Recently I reviewed the classic heapsort algorithm and implement it according to contents in Introdu ...
- delphi -----TTreeView
TTreeView 与两个重要的类相关:TTreeNodes.TTreeNode . TTreeNodes即是TTreeView 的Items属性,TTreeNodes是TTreeNode的合集,TT ...