扫了一眼题,看到数据范围200,理所当然想到了网络流...

一开始看题以为是费用流...

但是仔细一想并不能用费用流,应该是个最小割.

考虑把每个点拆成两个点即x ,x`,那么在x -> x`连一个容量为 wi的边,代表经过这个点以后最多花费只能是wi

对于一个边u,v,把u` 连一个容量为inf的边到v,跑一边最大流即可.

c++代码如下:

#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)
#define repd(i,x,y) for(register int i = x ; i >= y; -- i)
using namespace std;
typedef long long ll;
template<typename T>inline void read(T&x)
{x = 0;char c;int sign = 1;do { c = getchar(); if(c == '-') sign = -1; }while(!isdigit(c));do { x = x * 10 + c - '0'; c = getchar(); }while(isdigit(c));x *= sign;
}const int N = 405,M = 2e5+500,inf = 0x3f3f3f3f;
int n,m,s,t,ans,d[N],cur[N];
int head[N],nxt[M],to[M],f[M],tot;inline void add(int x,int y,int flow)
{f[tot] = flow;to[tot] = y;nxt[tot] = head[x];head[x] = tot++;
}inline bool bfs()
{memset(d,0,sizeof d);queue<int>q ;q.push(s);d[s] = 1;while(!q.empty()){int x = q.front(); q.pop(); cur[x] = head[x];for(register int i = head[x];~i;i = nxt[i])if(f[i] && !d[to[i]]){d[to[i]] = d[x] + 1;q.push(to[i]);}}return d[t];
}int dfs(int x,int w)
{if(!w || x == t) return w;int flow = 0,F;for(register int&i = cur[x];~i;i=nxt[i])if(d[to[i]] == d[x] + 1 && (F = dfs(to[i],min(w,f[i])))){f[i] -= F;f[i^1] += F;w -= F;flow += F;if(!w) return flow;}return flow;
}int main()
{ans = inf;memset(head,-1,sizeof head);read(n); read(m);read(s); read(t);rep(i,1,n){int x;read(x);if(i == s || i == t){ans = min(ans,x);continue;}add(i,i + n,x);add(i + n,i,0);}rep(i,1,m){int u,v;read(u); read(v);add(u+n,v,inf);add(v,u+n,0);add(v+n,u,inf);add(u,v+n,0);}s += n;int num = 0;while(bfs())num += dfs(s,inf);cout << min(ans,num) << endl;return 0;
}

1163: [Baltic2008]Mafia相关推荐

  1. bzoj1339[Baltic2008]Mafia*

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

  2. [Baltic2008]Mafia

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

  3. BZOJ1163: [Baltic2008]Mafia

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

  4. [BZOJ1339] [Baltic2008] Mafia / 黑手党

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

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

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

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

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

  7. OpenJudge/Poj 1163 The Triangle

    1.链接地址: http://bailian.openjudge.cn/practice/1163 http://poj.org/problem?id=1163 2.题目: 总时间限制: 1000ms ...

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

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

  9. 信息学奥赛一本通 1163:阿克曼(Ackmann)函数

    [题目链接] ybt 1163:阿克曼(Ackmann)函数 [题目考点] 1. 函数 [题解代码] 解法1: 按照题目要求,将数学函数写为c++函数 #include<bits/stdc++. ...

最新文章

  1. Xcode中Objc动态调用方法同时避免警告的几个办法
  2. php 算法 数字比较,数据两两比较的高效算法?
  3. 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
  4. 第二十二篇 玩转数据结构——构建动态数组
  5. 从零开始搭建神经网络并将准确率提升至85%
  6. Program Variant Scheduling job
  7. 协同oa办公系统在线演示下载地址
  8. 【武忠祥高等数学基础课笔记】定积分
  9. 为人处世,请从学会闭嘴开始!
  10. Uninstall tool 3.6.0 授权版
  11. 派生BOM (Variant Bom)操作
  12. luogu P5149 会议座位
  13. 计算机开机自启文件夹,开机启动文件夹在哪
  14. VGA原理详解与verilog实现RGB888彩条(二)
  15. 关于更新windows10 软件乱码
  16. 树莓派与OpenCV实现人脸识别(OpenCV安装篇)
  17. 用MATLAB画圣诞树的源代码
  18. [dt]世纪历史长河年代表
  19. 文字识别(六)--不定长文字识别CRNN算法详解
  20. 图解 Transformer

热门文章

  1. 神经网络与深度学习(一)——机器学习基础
  2. 文秘计算机操作试题,文秘招聘试题及答案.doc
  3. 冬季旅游,北海的风景、历史与美食,气候温暖如春
  4. 第03章 Tableau基础操作
  5. python脚本下载百度或必应图片
  6. python 全自动化爬取必应图片
  7. bootmgr快速修复win7_如何使用老毛桃winpe进行磁盘分区引导修复?
  8. LeetCode数据结构基础---2021/8/18
  9. android新浪微博客户端毕业设计课题背景
  10. echarts 5.x 版本词云无法正常显示问题