一个点带权的图,有一些指向关系,删掉一个点他指向的点也不能留下,问子图最大权值


题解:

这是最大权闭合团问题

闭合团:集合内所有点出边指向的点都在集合内

构图方法

1.S到权值为正的点,容量为权值

2.权值为负的点到T,容量为权值绝对值

3.原图所有点容量为INF

4.正权值和-最小割=最大权值

5.S能在残余网络中搜到的点就是删除的点的个数

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
typedef long long ll;
#define N 5010
#define M 120010
#define INF 100000000000000LL
using namespace std;
ll head[N],cur[N],n,m,w[N],S,T,lev[N],ecnt=1,ans,sum,vis[N];
queue <int> q;
struct adj
{
ll nxt,v,w;
}e[2*M];
void add(ll u,ll v,ll w)
{
e[++ecnt].v=v,e[ecnt].w=w,e[ecnt].nxt=head[u],head[u]=ecnt;
e[++ecnt].v=u,e[ecnt].w=0,e[ecnt].nxt=head[v],head[v]=ecnt;
}
inline ll bfs()
{
ll u,v;
for (ll i=S;i<=T;i++)
lev[i]=-1,cur[i]=head[i];
lev[S]=0,q.push(S);
while (!q.empty())
{
u=q.front();
for (ll i=head[u];i;i=e[i].nxt)
{
if (e[i].w>0 && lev[v=e[i].v]==-1)
lev[v]=lev[u]+1,q.push(v);
}
q.pop();
}
return lev[T]!=-1;
}
inline ll dinic(const ll &u,const ll &flow)
{
if (u==T) return flow;
ll res=0,v,delta;
for (ll &i=cur[u];i;i=e[i].nxt)
{
if (e[i].w>0 && lev[u]<lev[v=e[i].v])
{
delta=dinic(v,min(e[i].w,flow-res));
if (delta)
{
e[i].w-=delta;
e[i^1].w+=delta;
res+=delta;
if (res==flow) break;
}
}
}
if (res!=flow) lev[u]=-1;
return res;
}
ll Maxflow()
{
ll ret=0;
while (bfs())
ret+=dinic(S,INF);
return ret;
}
void dfs(ll u)
{
ll v;
for (ll i=head[u];i;i=e[i].nxt)
{
if (e[i].w>0 && vis[v=e[i].v]==0)
vis[v]=1,sum++,dfs(v);
}
}
int main()
{
scanf("%lld%lld",&n,&m);
S=0,T=n+1;
for (ll i=1,x;i<=n;i++)
{
scanf("%lld",&x);
if (x>0) add(S,i,x),sum+=x;
else add(i,T,-x);
}
for (ll i=1,u,v;i<=m;i++)
scanf("%lld%lld",&u,&v),add(u,v,INF);
ans=sum-Maxflow();
memset(vis,0,sizeof(vis));
vis[S]=1;
sum=0;
dfs(S);
printf("%lld %lld\n",sum,ans);
return 0;
}

POJ 2987 Firing | 最大权闭合团的更多相关文章

  1. poj 2987 Firing 最大权闭合图

    题目链接:http://poj.org/problem?id=2987 You’ve finally got mad at “the world’s most stupid” employees of ...

  2. POJ 2987 - Firing - [最大权闭合子图]

    题目链接:http://poj.org/problem?id=2987 Time Limit: 5000MS Memory Limit: 131072K Description You’ve fina ...

  3. poj2987 Firing 最大权闭合子图 边权有正有负

    /** 题目:poj2987 Firing 最大权闭合子图 边权有正有负 链接:http://poj.org/problem?id=2987 题意:由于金融危机,公司要裁员,如果裁了员工x,那么x的下 ...

  4. POJ 2987 Firing 网络流 最大权闭合图

    http://poj.org/problem?id=2987 https://blog.csdn.net/u014686462/article/details/48533253 给一个闭合图,要求输出 ...

  5. POJ 2987 Firing(最大权闭合图)

    [题目链接] http://poj.org/problem?id=2987 [题目大意] 为了使得公司效率最高,因此需要进行裁员, 裁去不同的人员有不同的效率提升效果,当然也有可能是负的效果, 如果裁 ...

  6. POJ 2987 Firing(最大流最小割の最大权闭合图)

    Description You’ve finally got mad at “the world’s most stupid” employees of yours and decided to do ...

  7. POJ 2987 Firing【最大权闭合图-最小割】

    题意:给出一个有向图,选择一个点,则要选择它的可以到达的所有节点.选择每个点有各自的利益或损失.求最大化的利益,以及此时选择人数的最小值. 算法:构造源点s汇点t,从s到每个正数点建边,容量为利益.每 ...

  8. poj 2987 Firing【最大权闭合子图+玄学计数 || BFS】

    玄学计数 LYY Orz 第一次见这种神奇的计数方式,乍一看非常不靠谱但是仔细想想还卡不掉 就是把在建图的时候把正权变成w*10000-1,负权变成w*10000+1,跑最大权闭合子图.后面的1作用是 ...

  9. poj 2987 Firing

    Firing Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 10696   Accepted: 3226 Descript ...

随机推荐

  1. 理解css中的position属性

    理解css中的position 两种类型的定位 static类型:只有一个值position: static.position默认值 relative类型:包括三个值,这三个值会相互影响,允许你以特定 ...

  2. 使用Jmeter性能测试,读取csv文件时的乱码问题

    读取csv参数乱码问题 发送请求时参数通过CSV文件读取,发送请求后显示错误,把获取的参数通过在线urlencode转码器转码后发现是乱码.打开csv设值,编码格式选择的是UTF-8,打开参数文件后发 ...

  3. python json.dumps raise TypeError(repr(o) + " is not JSON serializable") TypeError: 0 is not JSON serializable

    出错如题. 这个问题有可能是因为python的json.dumps没法识别dump内容里的某些数据类型导致的.我的问题是因为dict中含有numpy.int64,numpy.float等类型导致的,需 ...

  4. 43_2.VUE学习之--不使用组件computed计算属性超简单的实现美团购物车原理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 超简单开发自己的php框架一点都不难

    (转)https://blog.csdn.net/qq_33862644/article/details/79344331 写框架的极简思路: 接收,打印参数想怎么弄.如 获取配置文件的方法,根据传过 ...

  6. hive连接MySQL报错

    错误如下: [root@awen01 /usr/local/apache-hive-1.2.1-bin]#./bin/hive Logging initialized using configurat ...

  7. 词向量1.md

    词向量 我们以句子分类为例,我们使用深度学习模型对句子进行分类,本质上这个模型的接受的舒服需要是数值型.因为文字是人们抽象出来的一个概念,这个 东西是不能被计算机直接理解的,我们需要人为的将这个文字转 ...

  8. Mybatis中updateByPrimaryKeySelective和updateByPrimaryKey区别

    int updateByPrimaryKeySelective(TbItem record); int updateByPrimaryKey(TbItem record); 上面的是逆转工程生成的Ma ...

  9. 在庫購買管理(MM)

    ■購買管理■ [購買依頼]ME51N: 登録ME52N: 変更ME53N: 照会 [購買発注]ME21N: 登録ME22N: 変更ME23N: 照会 [見積依頼]ME41: 登録ME42: 変更ME4 ...

  10. PHP.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

    商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现 ...