题意:

让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个。

题解:

对于每个边建一个点,然后就是裸的最大权闭合子图,

结果比赛的时候我的板子太丑,一直T,(不会当前弧优化...)

当时补题用的是蔡队的Dinic当前弧优化板子

今天重写了一遍

#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define all(x) x.begin(),x.end()
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
using namespace std;
const int mod=1e9+7;
const double PI=acos(-1.0);
const int maxn=1e6+7,maxm=2e6+7;
//head
ll n,m,s,t;
class graph{
public:
struct edge{
int from,to;ll cap,flow;
edge(int a,int b,ll c,ll d){from=a,to=b,cap=c,flow=d;}
};
vector<vector<edge>> node;
graph(int n=maxn){node.resize(n+2);}
void add(int a,int b,ll c,ll d){
node[a].emplace_back(a,b,c,d);
}
}; const ll INF = 1e18;
class dinic:public graph{
public:
int n,m,s,t;
vector<edge> edges;
vector<vector<int>> v;
vector<bool> vis;
vector<int> dis,cur;
dinic(int nn=maxn){
node.resize(nn+2);
v.resize(nn+2);
n=nn;
m=0;
}
void add(int a, int b, ll c){
edges.emplace_back(a,b,c,0);
edges.emplace_back(b,a,0,0);
v[a].emplace_back(m++);
v[b].emplace_back(m++);
//node[a].emplace_back(a,b,c,0);
//node[b].emplace_(b,a,0,0);
}
bool bfs(){
fill(all(vis),false);
fill(all(dis),0);
queue<int> q;
q.push(s);
dis[s]=0;
vis[s]=1;
while(!q.empty()) {
int now=q.front();q.pop();
for(auto &i:v[now]) {
edge &e=edges[i];
if(!vis[e.to]&&e.cap>e.flow){
vis[e.to]=1;
dis[e.to]=dis[now]+1;
q.push(e.to);
}
}
}
return vis[t];
}
ll dfs(int now, ll a){
if (now==t||a==0) return a;
ll flow=0,f;
int mm=v[now].size();
for(int &i=cur[now];i<mm;i++){
edge &e=edges[v[now][i]];
if(dis[now]+1==dis[e.to]&&(f= dfs(e.to,min(a,e.cap-e.flow)))>0){
e.flow+=f;
edges[v[now][i]^1].flow-=f;
flow+=f;
a-=f;
if(a==0) break;
}
}
return flow;
}
ll mf(int ss,int tt){
s=ss,t=tt;
dis.resize(n+2);
cur.resize(n+2);
vis.resize(n+2);
ll flow=0;
while(bfs()){
fill(all(cur),0);
flow+=dfs(s,INF);
}
return flow;
}
}; int main() {
IO;
cin>>n>>m;
int tt=n+m+1,ss=0;
dinic g(n+m+2);
rep(i,1,n) {
ll a;cin>>a;
if(a>0) g.add(i,tt,a);
}
ll sum=0;
rep(i,1,m) {
int a,b,c;cin>>a>>b>>c;
sum+=c;
g.add(i+n,a,INF);
g.add(i+n,b,INF);
g.add(ss,i+n,c);
}
cout<<sum-g.mf(ss,tt)<<endl;
return 0;
}

codeforces 1082G - Petya and Graph 最大权闭合子图 网络流的更多相关文章

  1. CodeForces 1082 G Petya and Graph 最大权闭合子图。

    题目传送门 题意:现在有一个图,选择一条边,会把边的2个顶点也选起来,最后会的到一个边的集合 和一个点的集合 , 求边的集合 - 点的集合最大是多少. 题解:裸的最大权闭合子图. 代码: #inclu ...

  2. Petya and Graph/最大权闭合子图、最小割

    原题地址:https://codeforces.com/contest/1082/problem/G G. Petya and Graph time limit per test 2 seconds ...

  3. Codeforces 1082 毛毛虫图构造&最大权闭合子图

    A #include<bits/stdc++.h> using namespace std; typedef long long ll; , MAXM = ; //int to[MAXM ...

  4. hiho# 1398 最大权闭合子图 网络流

    题目传送门 题意:给出n个活动,m个人,请人需要花费$a[i]$的钱,举办一次活动可以赚$b[i]$的钱,但是需要固定的几个人在场,一个人只需要请一次后就必定在场,问最大收益. 思路: 下列结论来自h ...

  5. BZOJ 1565 植物大战僵尸 最大权闭合子图+网络流

    题意: 植物大战僵尸,一个n*m的格子,每 个格子里有一个植物,每个植物有两个属性: (1)价值: (2)保护集合,也就是这个植物可以保护矩阵中的某些格子. 现在你是僵尸,你每次只能从(i,m) 格子 ...

  6. Petya and Graph(最小割,最大权闭合子图)

    Petya and Graph http://codeforces.com/contest/1082/problem/G time limit per test 2 seconds memory li ...

  7. CF1082G Petya and Graph(最小割,最大权闭合子图)

    QWQ嘤嘤嘤 感觉是最水的一道\(G\)题了 顺便记录一下第一次在考场上做出来G qwqqq 题目大意就是说: 给你n个点,m条边,让你选出来一些边,最大化边权减点权 \(n\le 1000\) QW ...

  8. CF 103E Buying Sets 最大权闭合子图,匹配 难度:4

    http://codeforces.com/problemset/problem/103/E 这道题首先一看就很像是最大权闭合子图,但是我们可以认为现在有两种点,数字和集合点,我们需要消除数字点的影响 ...

  9. P4177 [CEOI2008]order 网络流,最小割,最大权闭合子图

    题目链接 \(Click\) \(Here\) 如果没有租用机器就是一个裸的最大权闭合子图.现在有了租用机器应该怎么办呢? 单独拆点是不行的,因为会和直接买下的情况脱离关系,租借是和连边直接相关的,那 ...

随机推荐

  1. React-关于react的思考

    声明式开发 减少dom操作,减少代码量 可以与其他框架并存 组件化开发 单向数据流 视图层框架 大型项目需要与其他数据层框架一起使用 函数式编程 方便自动化测试

  2. aelf帮助C#工程师10分钟零门槛搭建DAPP&私有链开发环境

    aelf是一个可扩展的去中心化云计算区块链平台,支持高性能合约并行执行.原生多链数据交互.存储使用高性能分布式数据库. aelf整个系统可以在windows.osx及linux运行,团队在osx环境下 ...

  3. mysql自动断开该连接解决方案

    mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案 作者: MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断 ...

  4. jmeter学习记录--08--第三方测试组件

    我们安装的JMeter版本,功能仍然有欠缺,插件是一种补充,官方提供了很多插件. 官网地址:http://www.jmeter-plugins.org/, 里面有很多可以安装到JMeter的插件,基本 ...

  5. Vue之状态管理(vuex)与接口调用

    Vue之状态管理(vuex)与接口调用 一,介绍与需求 1.1,介绍 1,状态管理(vuex) Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态 ...

  6. 【经典数据结构】B树与B+树

    本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为“在计算机科学中,B树 ...

  7. monkey日志管理

    日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...

  8. form表单中新增button按钮,点击按钮表单会进行提交

    原生button控件,在非ie浏览器下,如果不指定type,默认为submit类型.如果不想自动提交表单,指定type=“button”

  9. BZOJ 3456: 城市规划 与 多项式求逆算法介绍(多项式求逆, dp)

    题面 求有 \(n\) 个点的无向有标号连通图个数 . \((1 \le n \le 1.3 * 10^5)\) 题解 首先考虑 dp ... 直接算可行的方案数 , 容易算重复 . 我们用总方案数减 ...

  10. 利用ESLINT进行js 语法检查,以及局部安装时遇到的一些坑

    1)安装ESlint,这里我说一下全局安装,一会我会说我为什么不局部安装. npm install eslint -g 2)创建一个你的项目文件夹,随便起个名字吧,并初始化 cd myapp npm ...