QWQ嘤嘤嘤

感觉是最水的一道\(G\)题了

顺便记录一下第一次在考场上做出来G qwqqq

题目大意就是说:

给你n个点,m条边,让你选出来一些边,最大化边权减点权

\(n\le 1000\)

QWQ

看完这个题和数据范围,第一感觉就是网络流啊QWQ首先,我们可以将一条边视为依赖于两个端点,也就是表示,你要是选择了这一条边的收益,必须付出剩下两个点的代价。

那么这就是一个经典的最大权闭合子图

\(从S向每个边对应的点连边权,然后每个边向两个端点连inf,然后每个端点向T连点权\)

最后,用\(sum边权 - 最小割\),就是最大收益了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define int long long
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
const int maxn = 4010;
const int maxm = 1e6+1e2;
const int inf = 1e9;
int point[maxn],nxt[maxm],to[maxm],val[maxm];
int h[maxn];
int cnt=1;
queue<int> q;
int s,t;
int n,m;
int ans;
int a[maxn],b[maxn];
void addedge(int x,int y,int w)
{nxt[++cnt]=point[x];to[cnt]=y;val[cnt]=w;point[x]=cnt;
}
void insert(int x,int y,int w)
{addedge(x,y,w);addedge(y,x,0);
}
bool bfs(int s)
{memset(h,-1,sizeof(h));h[s]=0;q.push(s);while (!q.empty()){int x  = q.front();q.pop();for (int i=point[x];i;i=nxt[i]){int p = to[i];if (val[i]>0 && h[p]==-1){h[p]=h[x]+1;q.push(p);}}}if (h[t]==-1) return false;else return true;
}
int dfs(int x,int low)
{if (x==t || low==0) return low;int totflow=0;for (int i=point[x];i;i=nxt[i]){int p = to[i];if (val[i]>0 && h[p]==h[x]+1){int tmp = dfs(p,min(low,val[i]));low-=tmp;totflow+=tmp;val[i]-=tmp;val[i^1]+=tmp;if (low==0) return totflow;}}if (low>0) h[x]=-1;return totflow;
}
int dinic()
{int ans=0;while (bfs(s)){ans=ans+dfs(s,inf);}return ans;
}
int x[maxm],y[maxm],w[maxm];
signed main()
{n=read(),m=read();for (int i=1;i<=n;i++) a[i]=read();s=maxn-10;t=s+1;for (int i=1;i<=m;i++){x[i]=read(),y[i]=read(),w[i]=read();insert(s,i+n,w[i]);insert(i+n,x[i],inf);insert(i+n,y[i],inf);ans=ans+w[i];}for (int i=1;i<=n;i++){insert(i,t,a[i]);}cout<<ans-dinic();return 0;
}

转载于:https://www.cnblogs.com/yimmortal/p/10161890.html

CF1082G Petya and Graph(最小割,最大权闭合子图)相关推荐

  1. 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图

    第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...

  2. 图论 —— 网络流 —— 最小割 —— 最大权闭合子图

    [概述] 给出一个有向图,每一个点都有一个权值,现在要选择一个权值和最大的子图,使得每个点的后继都在子图中,这个子图就称为最大权闭合子图. 如上图,能选的子图有:Ø.{1,2,3,4,5,6}.{3, ...

  3. HDU 3061 Battle(最小割----最大权闭合图)

    题意: Problem Description 由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅.而他上任的第一天,就面对了一场极其困难的战斗: 据侦查兵回报,前方共有N座城池,考虑到地势原因, ...

  4. CodeForces1082G Petya and Graph 最小割

    网络流裸题 \(s\)向点连边\((s, i, a[i])\) 给每个边建一个点 边\((u, v, w)\)抽象成\((u, E, inf)\)和\((v, E, inf)\)以及边\((E, t, ...

  5. [CF1082G]Petya and Graph

    题目大意:一张无向图$G=(V,E)$,定义$f(G)=\sum\limits_{e\in E}w_e-\sum\limits_{v\in V}w_v$,给一张$n(n\leqslant10^3)$个 ...

  6. 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割

    [题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...

  7. 最大权闭合子图(最小割模型)

    1,定义: 1,最大权闭合子图是最小割的一个模型.即每一个子图中的每一个点,其出边的点也全应该在这个子图中.而所有子图中,其点的权值和最大就是最大权闭合子图. 2,构建该图,我们把所有正权值点与源点s ...

  8. 洛谷 p4174 [noi2006] 最大获利 最小割(最大流),最大权闭合子图

    题目 题解 题目 洛谷 p4174 建站花费p[i]元,如果a,b两个站都建起来了获利c元,问最大的获利. 题解 首先需要理解最大流求最大权闭合子图,这个我也不说了,又是转载博客. https://b ...

  9. 最大权闭合子图(最小割)

    最大权闭合子图(最大流最小割) •参考资料 [1]最大权闭合子图 •权闭合子图 存在一个图的子图,使得子图中的所有点出度指向的点依旧在这个子图内,则此子图是闭合子图. 在这个图中有8个闭合子图:∅,{ ...

最新文章

  1. javascript判断输入的值是不是正整数
  2. Docker容器制作
  3. 2017-06-08 前端日报
  4. Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析
  5. SQL SERVER-日期按时区转换
  6. python调用可执行文件
  7. 泛函分析——有界线性算子和函数
  8. 设计模式:命令模式(Command)
  9. 微信开发者工具:Failed to load font ************** net::ERR_CONNECTION_RESET问题解决办法
  10. 信息学奥赛一本通 1056:点和正方形的关系 | OpenJudge NOI 1.4 18
  11. 三次握手,四次挥手(大白话)
  12. Dreamweaver 制作图片热点之后,点击热点部分会有个提示框,怎么去掉
  13. Python获取国内股票数据下载数据api接口
  14. 最新Hadoop环境搭建流程
  15. LaTeX里插入数学公式
  16. elasticsearch对analyzed字段无法使用term方法的解决办法
  17. 迅为stm32mp157开发板资料手册+实战教程+视频教程
  18. 【FastJson】使用FastJson将Json数组转换成字符串
  19. java如何把汉字转换成机内码_java语言如何将汉字转化成五笔
  20. CSS选择器优先级(特异性)

热门文章

  1. 什么是Mybatis ?
  2. 【CodeForces - 27E】Number With The Given Amount Of Divisors (数论,数学,反素数)
  3. php石头剪刀布五局三胜,求程序,下面是剪刀石头布的程序,谁能帮忙改成能选择三局两胜,五局三胜……的?能成功运行的加分...
  4. 东明县计算机学校,东明县职业中等专业学校2021年招生信息
  5. 伺服电机停的时候会冲一下_造成伺服电机抖动的原因竟然是它!内附解决方法...
  6. 我的世界有宠物系统的服务器,我的世界1.6.4宠物战争服务器客户端
  7. java双语试卷_Java程序设计基础(双语)试题题目及答案,课程2021最新期末考试题库,章节测验答案...
  8. Maven之自定义pom类型的基础项目
  9. leetcode143 重排链表
  10. 推荐系统(2)-协同过滤1-UserCF、ItemCF