Description

匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,

现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点

Input

第一行输入N,M代表车站的总个数,及有多少条双向边连接它们

第二行给出两个数a,b,代表匪徒的出发点及目标点.1<=a,b<=N,a<>b.

再下来有N行,给出对第i个车站进行布控所需要的Money,其不超过10 000 000

再下来M行,用于描述图的结构.

2<=n<=200 , 1 <=m<=20000

Output

最少需要多少Money

Sample Input

5 6
5 3
2
4
8
3
10
1 5
1 2
2 4
4 5
2 3
3 4

Sample Output

5

Solution

直接拆点跑最小割就好了。

在\(luogu\)还要输出最小割的一种方案,那么可以从\(s\)开始\(bfs\),沿着没流满的路径走,顺便走到的点标上\(visited\),若一条边起点被访问过,终点没有,那么这条边就被割掉了,具体可以考虑下为什么最大流等于最小割。

这里附上求方案的版本。

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}const int maxn = 2e5+10;
const int inf = 1e9;int n,m,s,t,tot=1;
int head[maxn],dis[maxn];
struct edge{int to,nxt,w;}e[maxn<<1];void add(int u,int v,int w) {e[++tot]=(edge){v,head[u],w},head[u]=tot;}
void ins(int u,int v,int w) {add(u,v,w),add(v,u,0);}int bfs() {memset(dis,-1,sizeof dis);queue<int > q;q.push(s);dis[s]=0;while(!q.empty()) {int x=q.front();q.pop();for(int i=head[x];i;i=e[i].nxt)if(e[i].w>0&&dis[e[i].to]==-1) {dis[e[i].to]=dis[x]+1;if(e[i].to==t) return 1;q.push(e[i].to);}}return 0;
}int dfs(int x,int f) {if(x==t) return f;int used=0;for(int i=head[x];i;i=e[i].nxt)if(e[i].w>0&&dis[e[i].to]==dis[x]+1) {int d=dfs(e[i].to,min(f-used,e[i].w));if(d>0) e[i].w-=d,e[i^1].w+=d,used+=d;if(used==f) break;}dis[x]=-1;return used;
}int max_flow() {int flow=0;for(;bfs();flow+=dfs(s,inf));return flow;
}int vis[maxn];void solve() {queue<int > q;q.push(s);vis[s]=1;while(!q.empty()) {int x=q.front();q.pop();//write(x);for(int i=head[x];i;i=e[i].nxt)if(e[i].w>0&&!vis[e[i].to]) q.push(e[i].to),vis[e[i].to]=1;}for(int i=2;i<=tot;i+=2) if(vis[e[i^1].to]&&!vis[e[i].to]) printf("%d ",e[i^1].to);puts("");
}int main() {read(n),read(m),read(s),read(t);t+=n;for(int i=1,x;i<=n;i++) read(x),ins(i,i+n,x);for(int i=1,x,y;i<=m;i++) read(x),read(y),ins(x+n,y,inf),ins(y+n,x,inf);max_flow();solve();return 0;
}

转载于:https://www.cnblogs.com/hbyer/p/10467114.html

[BZOJ1339] [Baltic2008] Mafia / 黑手党相关推荐

  1. bzoj1339[Baltic2008]Mafia*

    bzoj1339[Baltic2008]Mafia 题意: 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控.对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得 ...

  2. 【Baltic2008】黑手党(Mafia)(BSOI2891)

    Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初 ...

  3. 1163: [Baltic2008]Mafia

    扫了一眼题,看到数据范围200,理所当然想到了网络流... 一开始看题以为是费用流... 但是仔细一想并不能用费用流,应该是个最小割. 考虑把每个点拆成两个点即x ,x`,那么在x -> x`连 ...

  4. [Baltic2008]Mafia

    题目 传送门 to BZOJ 题目概要 nnn 个点.mmm 条边的无向图,找一些点,使得删去这些点后,aaa 和 bbb 不连通.最小化点权和. 数据范围与约定 2≤n≤200,1≤m≤200002 ...

  5. BZOJ1163: [Baltic2008]Mafia

    最大流最小割 题目传送门 仍然是套路拆点,就不细讲了. 注意要从s的入点跑到t的出点. 代码: #include<cstdio> #include<cstring> #incl ...

  6. 笔记整理英语篇(二) - 日常词汇

    thumbs down 大拇指朝下//表示不赞成 glove 手套 limit 限制 raincoat 雨衣 remote 摇控器//例如空调遥控器 straw 吸管 flour 面粉 cereals ...

  7. 黑帮网游 online mafia games

    7月27日,文化部下发通知,要求各地立即查处"黑帮"主题的非法网络游戏.这是文化部继 <关于加强网络游戏虚拟货币管理工作的通知>后,下发的又一部以规范网游市场为目的的通 ...

  8. bzoj1334[Baltic2008]Elect(背包dp)

    1334: [Baltic2008]Elect Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 575  Solved: 333 [Submit][S ...

  9. 【CodeForces - 349C】Mafia(思维模拟,优秀的二分)

    题干: One day n friends gathered together to play "Mafia". During each round of the game som ...

最新文章

  1. java sql参数_java-从SQL查询检索参数
  2. angular8 设置延时时间
  3. java post get 请求_java get post 请求
  4. endnote导入参考文献及国标(Chinese standard)
  5. php下载大文件不稳定,window_Apache2+PHP在Windows2000下不稳定解决方案,1  制作一个bat文件在计划 - phpStudy...
  6. Google完整安装包下载
  7. 计算机科研立项应用类题目,省级课题计算机课题题目推荐
  8. Linux中pts/0的讲解
  9. 留不下的城市,回不去的家乡,真得么?
  10. 相对丰度会歪曲实际丰度,联合16S扩增子测序和总菌qPCR获得的绝对丰度可靠吗?...
  11. python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
  12. Flask学习笔记(一)
  13. Spring4 对Bean Validation规范的新支持(方法级别验证)
  14. python 并行执行_python 串行执行和并行执行实例
  15. 最常用36个英语万能动词的词组短语和习惯用语大全!
  16. JS中的分支语句和循环语句
  17. 如何在App过审之后进入解决方案中心
  18. stm32中cubmx+keil+proteus+虚拟串口+串口助手的使用
  19. [英语语法]二刷语法--发刊词及序言
  20. CSS3控制变量输出精灵图序列帧动画 frameAnime.css

热门文章

  1. 最好的网站宣传方法:网摘精灵
  2. 【国产数据库】GBase学习④ - GBase 8c 介绍
  3. 大数据标准管理体系流程
  4. 计算机房空调设计要求,计算机机房空调设计规范
  5. 3D动画起步(透视原理)
  6. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)
  7. 浅析c++中virtual关键字
  8. 校招前端二面常考react面试题(边面边更)
  9. Lifekeeper Linux
  10. 个人作业--四则运算3(PSP)