思路:
首先比较显然能够想到二进制拆分
每一位的贡献是独立的
然后可以用最小割解决
S->i 表示这一个位置是0 inf
i-T 表示为1 inf
然后所有的边保留 1
这样只要最后再找一遍t集合里面的点就可以确定那些不确定的点了
第二问好像没什么用? 确定了每个位置后他的值也就确定了
10^9的限制是干嘛的?

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long LL;
const int imax=500+9;
const int dmax=imax;
const int bmax=100000+229;
const int inf=100000229;
int n,m;
int a[imax],A[bmax],B[bmax],val[dmax],ind[dmax];
int S,T,num,head[dmax],inext[bmax],to[bmax],re[bmax];void iread()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=m;i++) scanf("%d%d",&A[i],&B[i]);
}void findset(int x)
{ind[x]=1;for(int i=head[x];i!=-1;i=inext[i]) if(!ind[to[i]] && re[i^1]) findset(to[i]); //反向边有流量说明这条边有贡献
}void iadd(int u,int v,int flow){ to[num]=v; re[num]=flow; inext[num]=head[u]; head[u]=num++;}
void add(int u,int v,int flow) { iadd(u,v,flow); iadd(v,u,0); }int d[dmax];
queue<int> q;
bool BFS()
{memset(d,0,sizeof(d));d[S]=1; q.push(S);while(!q.empty()){int u=q.front(); q.pop();for(int i=head[u];i!=-1;i=inext[i])if(re[i] && !d[to[i]]){d[to[i]]=d[u]+1;q.push(to[i]);  }}return d[T]!=0;
}int DFS(int x,int c)
{if(x==T || c==0) return c;int r=c;for(int i=head[x];i!=-1;i=inext[i])if(d[to[i]]==d[x]+1){int ff=DFS(to[i],min(re[i],r));r-=ff; re[i]-=ff; re[i^1]+=ff;if(!r) break;   }   if(r==c) d[x]=0;return c-r;
}int dinic()
{int nowans=0;while(BFS()) nowans+=DFS(S,inf);
//  printf("%d\n",nowans);return nowans;
} void build(int k)
{S=0; T=n+1; num=0;for(int i=S;i<=T;i++) head[i]=-1;for(int i=1;i<=n;i++)if(a[i]>=0){if(a[i]&(1<<(k-1))) add(i,T,inf);else add(S,i,inf);}for(int i=1;i<=m;i++){add(A[i],B[i],1);add(B[i],A[i],1);}
}void iwork()
{int Max=30;LL ans1=0; LL ans2=0;for(int i=1;i<=Max;i++) {build(i);ans1+=(1LL<<(i-1))*dinic();memset(ind,false,sizeof(ind));findset(T);for(int j=1;j<=n;j++) if(ind[j]) val[j]+=(1<<(i-1));  }for(int i=1;i<=n;i++){if(a[i]>0) ans2+=a[i];else ans2+=val[i];}cout<<ans1<<endl<<ans2<<endl;
}int main()
{iread();iwork();return 0;
}

BZOJ 2400(网络流最小割)相关推荐

  1. 【bzoj2521】[Shoi2010]最小生成树 网络流最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

  2. 【bzoj2132】圈地计划 网络流最小割

    题目描述 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区域,可以纵横划 ...

  3. 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化

    题目链接: https://www.luogu.com.cn/problem/P1646 参考博客: https://siyuan.blog.luogu.org/solution-p1646 算法:网 ...

  4. P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)

    P4897 [模板]最小割树(Gomory-Hu Tree) 这个算法可以用来求解一个无向图上任意两点的最小割,具体过程就是每次选择两个点求最小割,然后在一个新图中这两个点连边,然后对于这两个点的连通 ...

  5. CodeForces 1517G Starry Night Camping(网络流最小割)

    CodeForces 1517G Starry Night Camping problem 洛谷链接 solution 这个平行四边形的脑洞我™真的长见识了 本题最离谱的要求就是:平行四边形的一条边平 ...

  6. jzoj4020-Revolution【网络流,最小割】

    正题 题目链接:https://jzoj.net/senior/#contest/show/3014/2 题目大意 n∗mn*mn∗m的地方,每个地方有购买价格和收益,一个地方如果四周都被购买那么也可 ...

  7. 图论 —— 网络流 —— 最小割 —— 平面图与对偶图

    [平面图] 对于一个图 G=(V,E),若其重画后,在平面任意两条边的交点除了图中点外,没有其他交点,那么这个图称为平面图 在平面图中,由边包围并且其中不含顶点的区域称为面 包围面 R 的所有边组成的 ...

  8. Gym - 101982E Cops And Robbers 网络流最小割

    1.题意: 输入一个n行m列的地图,地图上有k种陷阱底座,每种陷阱必须放在相应底座上,并且有一定的花费.有一只兔子初始位置在'B'处,为了使这只兔子不能逃出地图,必须放置一些陷阱来阻拦它.问怎么样放置 ...

  9. AcWing2279 网络战争 (01分数规划+网络流 最小割模型)

    原题链接:AcWing2279 网络战争 题目大意 给一个无向带权图,求将s和t分开的一个边割集,使得割集的平均边权最小,即最小化∑e∈cwe∣c∣\frac{\sum_{e\in c} w_e}{| ...

最新文章

  1. arcengine开发如何获取ipolygon的中心点_如何保证倾斜摄影建模效果和建模精度?...
  2. libnids抓不到包
  3. 【分组背包问题 (HDU 3535 )】
  4. (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】
  5. vb6 datagrid表格垂直居中_老板不喜欢看你的Excel表格,学完这些美化技巧,早日升职加薪...
  6. web安全之SQL注入---第四章 如何进行SQL注入攻击
  7. Linux下C 更改字符在终端的显示颜色
  8. MATLAB 图像处理 简单人脸检测(详细,你上你也行)
  9. 计算机computer英语划分音节,computer是什么意思
  10. 电脑使用速度变慢的七大常见原因
  11. PHP基础+php高级+前端+项目实战视频教程免费分享
  12. 《金融学》笔记 第一章 货币的本质
  13. Python数据分析-绘图-2-Seaborn进阶绘图-6-回归图
  14. python中 s是什么意思_这里面的s.name是什么意思啊?
  15. 推荐开源项目计划管理软件 kanboard
  16. 北斗定位,定位追踪,防盗追踪系统设计方案
  17. 量子计算(9)编程实践1:构造贝尔态
  18. 最大4k地址计算机组成原理,级计算机组成原理期末考试复习大纲资料.ppt
  19. Python PyQt5系列(五)界面设计第一步Qt Design
  20. 《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第3章 B- CC2530 MQ2 ADC读取烟雾浓度数值

热门文章

  1. Win10 定制美化神器
  2. shopee,lazada卖家如何提升产品权重,获得流量
  3. Tabulator javascript data grid数据表格控件v5.1.0 发布说明
  4. 【ROS-Navigation】Costmap2d代价地图源码分析——ObstacleLayer障碍物层
  5. Java中的集合多线程的理解
  6. 【转】2013年第一季度最具影响力的CRM排名
  7. 编译原理词法分析(正规式转NFA)
  8. 类模板,函数模板,及其特化
  9. 信息安全复习三:古典密码之设计好的密码算法
  10. 浅谈云计算的安全问题——“瑞友杯”虚拟化征文