POJ 2987 Firing 最大流 网络流 dinic 模板
https://www.cnblogs.com/137shoebills/p/9100790.html
http://poj.org/problem?id=2987
之前写过这道题,码一个dinic的最大流板子。
经典问题,选了一个点就有些点必须选,输出使选出的点的权值和最大的最少点数,并输出该权值和。
建图就是s向权值为正的点连流量为val的边,权值为负的点向t连流量为-val的边,所有的权值和-最大流就是答案。
类似于https://www.cnblogs.com/137shoebills/p/7786985.html
细节是注意流量会爆int
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<queue>
using namespace std;
#define LL long long
const int maxn=;
const LL minf=(LL)1e11;
int n,m,s,t;
LL val[maxn]={};
struct nod{
int y,next;LL v;
}e[];
int head[maxn]={},tot=,dep[maxn]={};
queue<int>q;
bool vis[maxn]={}; int cnt=;
void init(int x,int y,LL v){
e[++tot].y=y;e[tot].v=v;e[tot].next=head[x];head[x]=tot;
}
int bfs(){
q.push(s);
memset(dep,,sizeof(dep));
dep[s]=;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].next){
if(e[i].v&&(!dep[e[i].y])){
dep[e[i].y]=dep[x]+;
q.push(e[i].y);
}
}
}
return dep[t];
}
LL dfs(int x,LL fc){
if(x==t)return fc;
LL tsn=;
for(int i=head[x];i;i=e[i].next){
if(e[i].v&&dep[e[i].y]==dep[x]+){
LL z=dfs(e[i].y,min(fc-tsn,e[i].v));
tsn+=z;e[i].v-=z;e[i^].v+=z;
if(tsn==fc)break;
}
}
return tsn;
}
LL dinic(){
LL tsn=;
while(bfs())tsn+=dfs(s,minf);
return tsn;
}
void getit(int x){
if(x==t)return;
if(x!=s)++cnt;
vis[x]=;
for(int i=head[x];i;i=e[i].next){
if(e[i].v&&!vis[e[i].y]){
getit(e[i].y);
}
}
}
int main(){
scanf("%d%d",&n,&m);
s=n+;t=s+;
LL ans=;
for(int i=;i<=n;++i){
scanf("%lld",&val[i]);
if(val[i]>=){init(s,i,val[i]); init(i,s,); ans+=val[i];}
else{init(i,t,-val[i]);init(t,i,);}
}
for(int i=;i<=m;++i){
int x,y;
scanf("%d%d",&x,&y);
init(x,y,minf);init(y,x,);
}
ans-=dinic();
getit(s);
printf("%d ",cnt);
printf("%lld\n",ans);
return ;
}
POJ 2987 Firing 最大流 网络流 dinic 模板的更多相关文章
- POJ 1273 Drainage Ditches (网络流Dinic模板)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- 洛谷P3376【模板】网络最大流 Dinic模板
之前的Dinic模板照着刘汝佳写的vector然后十分鬼畜跑得奇慢无比,虽然别人这样写也没慢多少但是自己的就是令人捉急. 改成邻接表之后快了三倍,虽然还是比较慢但是自己比较满意了.虽然一开始ecnt从 ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- POJ 2987 Firing 网络流 最大权闭合图
http://poj.org/problem?id=2987 https://blog.csdn.net/u014686462/article/details/48533253 给一个闭合图,要求输出 ...
- Power Network POJ - 1459 网络流 DInic 模板
#include<cstring> #include<cstdio> #define FOR(i,f_start,f_end) for(int i=f_startl;i< ...
- poj 2987 Firing 最大权闭合图
题目链接:http://poj.org/problem?id=2987 You’ve finally got mad at “the world’s most stupid” employees of ...
- POJ 2987 - Firing - [最大权闭合子图]
题目链接:http://poj.org/problem?id=2987 Time Limit: 5000MS Memory Limit: 131072K Description You’ve fina ...
- POJ 2987 Firing (最大权闭合图)
Firing Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 12108 Accepted: 3666 Descript ...
- POJ 2987 Firing【最大权闭合图-最小割】
题意:给出一个有向图,选择一个点,则要选择它的可以到达的所有节点.选择每个点有各自的利益或损失.求最大化的利益,以及此时选择人数的最小值. 算法:构造源点s汇点t,从s到每个正数点建边,容量为利益.每 ...
随机推荐
- CF1097G Vladislav and a Great Legend 组合、树形背包
传送门 看到\(k\)次幂求和先用斯特林数拆幂:\(x^k = \sum\limits_{i=1}^k \binom{x}{i}\left\{ \begin{array}{cccc} k \\ i \ ...
- ORACLE数据库实现自增的两种方式
Mysql数据库因为其有自动+1,故一般我们不需要花费太多时间,直接用关键字auto_increment即可,但是Oracle不行,它没有自动增长机制.顾我们需要自己去实现.一般有两种方式,但是这两种 ...
- ppt thinkcell-Thinkcell: 一款强大的专业图表制作工具
https://jingyan.baidu.com/article/6dad50750e6121a123e36e00.html
- vue 项目之后生成的 dist 文件该怎么在本地启动运行
简单高效 npm i -g servecd distserve
- javascript 同源策略和 JSONP 的工作原理
同源策略 同源策略是一个约定,该约定阻止当前脚本获取或操作另一域的内容.同源是指:域名.协议.端口号都相同. 简单地说,A 服务器下的 a 端口执行 ajax 程序,不能获取 B 服务器或者 A 服务 ...
- Angular配置路由以及动态路由取值传值跳转
Angular配置路由 1.找到 app-routing.module.ts 配置路由 引入组件 import { HomeComponent } from './home/home.componen ...
- Java 之 Servlet中的生命周期
Servlet 生命周期 一.重写servlet方法 当创建一个类,继承 servlet 这个接口时,需要实现里面的抽象方法. import javax.servlet.*; import java. ...
- iOS 10.0前的Notification推送
前言 推送为远程推送,一般由苹果APNS服务器发送给苹果设备(iPhone,iPad) 推送分在前台和后台.在前台时 用户可以在application 的代理回调接口中做相应处理:在后台时 系统会全权 ...
- 微信小程序之生成图片分享 二维码分享 canvas绘制
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 添加画布 首先,在小程序里进行绘图操作需要用到<canvas>组件,步骤大致分为以 ...
- p5.BTC-网络
Bitcoin工作在应用层,网络层是P2P . Bitcoin网络通信的设计原则是 simple robust ,but not efficient. 每个节点维护一个邻居节点的集合,消息传播采取 ...