1163: [Baltic2008]Mafia
扫了一眼题,看到数据范围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相关推荐
- bzoj1339[Baltic2008]Mafia*
bzoj1339[Baltic2008]Mafia 题意: 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控.对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得 ...
- [Baltic2008]Mafia
题目 传送门 to BZOJ 题目概要 nnn 个点.mmm 条边的无向图,找一些点,使得删去这些点后,aaa 和 bbb 不连通.最小化点权和. 数据范围与约定 2≤n≤200,1≤m≤200002 ...
- BZOJ1163: [Baltic2008]Mafia
最大流最小割 题目传送门 仍然是套路拆点,就不细讲了. 注意要从s的入点跑到t的出点. 代码: #include<cstdio> #include<cstring> #incl ...
- [BZOJ1339] [Baltic2008] Mafia / 黑手党
Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价, 现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的 ...
- 【Baltic2008】黑手党(Mafia)(BSOI2891)
Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初 ...
- bzoj1334[Baltic2008]Elect(背包dp)
1334: [Baltic2008]Elect Time Limit: 10 Sec Memory Limit: 162 MB Submit: 575 Solved: 333 [Submit][S ...
- OpenJudge/Poj 1163 The Triangle
1.链接地址: http://bailian.openjudge.cn/practice/1163 http://poj.org/problem?id=1163 2.题目: 总时间限制: 1000ms ...
- 【CodeForces - 349C】Mafia(思维模拟,优秀的二分)
题干: One day n friends gathered together to play "Mafia". During each round of the game som ...
- 信息学奥赛一本通 1163:阿克曼(Ackmann)函数
[题目链接] ybt 1163:阿克曼(Ackmann)函数 [题目考点] 1. 函数 [题解代码] 解法1: 按照题目要求,将数学函数写为c++函数 #include<bits/stdc++. ...
最新文章
- Xcode中Objc动态调用方法同时避免警告的几个办法
- php 算法 数字比较,数据两两比较的高效算法?
- 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
- 第二十二篇 玩转数据结构——构建动态数组
- 从零开始搭建神经网络并将准确率提升至85%
- Program Variant Scheduling job
- 协同oa办公系统在线演示下载地址
- 【武忠祥高等数学基础课笔记】定积分
- 为人处世,请从学会闭嘴开始!
- Uninstall tool 3.6.0 授权版
- 派生BOM (Variant Bom)操作
- luogu P5149 会议座位
- 计算机开机自启文件夹,开机启动文件夹在哪
- VGA原理详解与verilog实现RGB888彩条(二)
- 关于更新windows10 软件乱码
- 树莓派与OpenCV实现人脸识别(OpenCV安装篇)
- 用MATLAB画圣诞树的源代码
- [dt]世纪历史长河年代表
- 文字识别(六)--不定长文字识别CRNN算法详解
- 图解 Transformer