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 ;
}

最新文章

  1. mono中发送邮件并保存本次收件人的地址
  2. Linux命令学习总结:hexdump
  3. [原] Android快速开发框架-AndroidFine,GitHub开源
  4. 如何使用mybatis《三》
  5. rabbitMq 转自 http://gaoyangang.iteye.com/blog/1566600
  6. 目前国内外主流的linux发行版本
  7. 根据当前IP获取当时所在信息
  8. 【转】Java中字符串中子串的查找共有四种方法(indexof())
  9. UIWindow &amp; UIWindowLevel详解
  10. Vue声明式渲染
  11. Scala 安装 Exception in thread &quot;main&quot; java.lang.VerifyError: Uninitialized object exists on backward branch 96
  12. Spring boot(4)-应用打包部署
  13. 【转】简单了介绍js中的一些概念(词法结构) 和 数据类型(部分)。
  14. mysql 远程连接 10038
  15. SpringSecurity实现用户名密码登录(Token)
  16. TDG今日成立!
  17. Thymeleaf学习记录(1)--启动模板及建立Demo
  18. Codeforces.392E.Deleting Substrings(区间DP)
  19. 廖雪峰网站:学习python基础知识(一)
  20. vue.js指令总结

热门文章

  1. c#中冒泡排序算法描述
  2. H3C S3600V2 通过CONSOLE配置端口镜像
  3. BUAAOO-Final-Summary
  4. jvm调优相关
  5. 配置CTS+
  6. buffer和cache区别?
  7. httpclient4.5.2 Post请求支持http和https
  8. 加密类型、数据加密解密过程以及CA创建
  9. centos6/7添加系统服务
  10. ISCC之msc2