BZOJ1163&BZOJ1339[Baltic2008]Mafia——最小割
题目描述
输入
输出
样例输入
5 3
2
4
8
3
10
1 5
1 2
2 4
4 5
2 3
3 4
样例输出
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int next[6000001];
int to[6000001];
int val[6000001];
int head[6000001];
int tot=1;
int q[6000001];
int n,m;
int S,T;
int x,y;
int k1,k2;
int ans;
int d[6000001];
const int INF=0x3f3f3f3f;
void add(int x,int y,int v)
{
tot++;
next[tot]=head[x];
head[x]=tot;
to[tot]=y;
val[tot]=v;
tot++;
next[tot]=head[y];
head[y]=tot;
to[tot]=x;
val[tot]=0;
}
bool bfs(int S,int T)
{
int r=0;
int l=0;
memset(d,-1,sizeof(d));
q[r++]=S;
d[S]=0;
while(l<r)
{
int now=q[l];
for(int i=head[now];i;i=next[i])
{
if(d[to[i]]==-1&&val[i]!=0)
{
d[to[i]]=d[now]+1;
q[r++]=to[i];
}
}
l++;
}
if(d[T]==-1)
{
return false;
}
else
{
return true;
}
}
int dfs(int x,int flow)
{
if(x==T)
{
return flow;
}
int now_flow;
int used=0;
for(int i=head[x];i;i=next[i])
{
if(d[to[i]]==d[x]+1&&val[i]!=0)
{
now_flow=dfs(to[i],min(flow-used,val[i]));
val[i]-=now_flow;
val[i^1]+=now_flow;
used+=now_flow;
if(now_flow==flow)
{
return flow;
}
}
}
if(used==0)
{
d[x]=-1;
}
return used;
}
void dinic()
{
while(bfs(S,T)==true)
{
ans+=dfs(S,0x3f3f3f);
}
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%d%d",&k1,&k2);
S=k1;
T=n+k2;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
add(i,n+i,x);
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(n+x,y,INF);
add(n+y,x,INF);
}
dinic();
printf("%d",ans);
return 0;
}
BZOJ1163&BZOJ1339[Baltic2008]Mafia——最小割的更多相关文章
- [BZOJ1163][BZOJ1339][Baltic2008]Mafia
[BZOJ1163][BZOJ1339][Baltic2008]Mafia 试题描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用 ...
- bzoj1339[Baltic2008]Mafia*
bzoj1339[Baltic2008]Mafia 题意: 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控.对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得 ...
- [BZOJ1339] [Baltic2008] Mafia / 黑手党
Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价, 现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的 ...
- 【bzoj1163/bzoj1339】[Baltic2008]Mafia 网络流最小割
题目描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点 ...
- bzoj1339/1163:[Baltic2008]Mafia
传送门 最小割,割点,模板... 代码: #include<cstdio> #include<iostream> #include<algorithm> #incl ...
- 1339 / 1163: [Baltic2008]Mafia
1163: [Baltic2008]Mafia Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 96 Solved: 60[Submit][Statu ...
- 1163: [Baltic2008]Mafia
1163: [Baltic2008]Mafia Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 123 Solved: 70[Submit][Stat ...
- BZOJ 1391: [Ceoi2008]order [最小割]
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1509 Solved: 460[Submit][Statu ...
- BZOJ-2127-happiness(最小割)
2127: happiness(题解) Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1806 Solved: 875 Description 高一 ...
随机推荐
- 人生苦短之学习Python50本书籍(包涵基础、算法、机器学习、模块、爬虫框架、树莓派等)总有你想要的书籍
很多小伙伴说想学习想学习但是没有学习书籍,我给大家分享一大波学习书籍,具体的可以自己往下翻 <"笨办法学"Python3> Zed Shaw 著 (2018年5月) ...
- 把一个List<T>的数据复制至另一个List<T>
把一个数据集List<T>复制至到另一个数据集List<T>. 方法一,可以使用循环,然后把每一个T添加至另一个集合中去: public void ListDemo() { , ...
- [数据可视化之一]Pandas单变量画图
Pandas单变量画图 Bar Chat Line Chart Area Chart Histogram df.plot.bar() df.plot.line() df.plot.area() df. ...
- sql语句——行列互换
SELECT 年份, SUM(case when 季度=1 then 销量 else 0 end) as 一季度, SUM(case when 季度=2 then 销量 else 0 end) as ...
- [已解决]An unhandled exception occurred while processing the request.
An unhandled exception occurred while processing the request. InvalidOperationException: The layout ...
- 老生常谈,函数柯里化(curring)
柯里化这个概念确实晦涩难懂,没有深入思考过的人其实真的很难明白这是一个什么东西.看起来简单.简单到或许只需要一行代码: const curry = fn => (…args) => fn. ...
- LeetCode Pow(x, n) (快速幂)
题意 Implement pow(x, n). 求X的N次方. 解法 用正常的办法来做是会超时的,因为可能有21亿次方的情况,所以需要优化一下.这里用到了快速幂算法,简单来说就是将指数分解成二进制的形 ...
- jQuery中.html(“xxx”)和.append("xxx") 的区别
append是追加,html是完全替换比如<p id="1"><p>123</p></p> $("#1").ht ...
- M1/M2 总结
时光是一列不会回头的列车. 这一学期这么快就过去了,当时刚开始软件工程的那些日子还历历在目.不知道那些如风般过去的日子带给我了什么.然而我又清楚地认识到自己已经改变了. 刚开始软件工程的时候,我对团队 ...
- Linux内核分析——字符集总结与分析
一. 设置修改系统.应用默认字符集 1. 查看虚拟机的字符集: 由此可见,该虚拟机的字符集为zh_CN.UTF-8. 2. 查看服务器支持的编码方式 3. 修改字符集类型 上图可见,LANG字符 ...