题面:BZOJ传送门

和方格取数问题很像啊

但这道题不能像网格那样黑白染色构造二分图,所以考虑拆点建出二分图

我们容易找出数之间的互斥关系,在不能同时选的两个点之间连一条流量为$inf$的边

由于我们是拆点建的图,所以对于两个点$x,y$,$x1$向$y2$连边,$y1$向$x2$连边,边权均为$inf$

然后就是最大权闭合图的裸题了,源点$S$向所有$1$点连边,所有$2$点向汇点$T$连边,边权为$b_{i}$

跑最大流。最终答案是$\sum b_{i}-$最大流$/2$,$/2$是因为拆点求出的是$2$倍的最小割

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 2010
#define M1 1010000
#define ll long long
using namespace std; const int inf=0x3f3f3f3f;
int gint()
{
int ret=,fh=; char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
int gcd(int x,int y){ if(!y) return x; return gcd(y,x%y); }
struct Edge{
int head[N1],to[M1<<],nxt[M1<<],flow[M1<<],cte;
void ae(int u,int v,int f)
{
cte++; to[cte]=v; nxt[cte]=head[u];
head[u]=cte; flow[cte]=f;
}
}e; int n,m,hd,tl,S,T;
int dep[N1],cur[N1],que[M1];
int bfs()
{
int x,j,v;
memset(dep,-,(T+)<<); memcpy(cur,e.head,(T+)<<);
hd=,tl=; que[++tl]=S; dep[S]=;
while(hd<=tl)
{
x=que[hd++];
for(j=e.head[x];j;j=e.nxt[j])
{
v=e.to[j];
if( e.flow[j]> && dep[v]==- )
dep[v]=dep[x]+, que[++tl]=v;
}
}
return dep[T]!=-;
}
int dfs(int x,int limit)
{
int j,v,flow,ans=;
if(x==T||!limit) return limit;
for(j=cur[x];j;j=e.nxt[j])
{
v=e.to[j]; cur[x]=j;
if( dep[v]==dep[x]+ && (flow=dfs(v,min(e.flow[j],limit))) )
{
e.flow[j]-=flow; limit-=flow;
e.flow[j^]+=flow; ans+=flow;
if(!limit) break;
}
}
return ans;
}
int Dinic()
{
int ans=;
while(bfs())
ans+=dfs(S,inf);
return ans;
} int a[N1],b[N1];
int main()
{
scanf("%d",&n); S=; T=n+n+;
int i,j,sum=,ans;ll k; e.cte=;
for(i=;i<=n;i++) a[i]=gint();
for(i=;i<=n;i++) b[i]=gint(), sum+=b[i];
for(i=;i<=n;i++) for(j=;j<=n;j++)
{
if(i==j) continue;
if(gcd(a[i],a[j])>) continue;
k=sqrt(1ll*a[i]*a[i]+1ll*a[j]*a[j]);
if(1ll*k*k!=1ll*a[i]*a[i]+1ll*a[j]*a[j]) continue;
e.ae(i,j+n,inf); e.ae(j+n,i,);
}
for(i=;i<=n;i++) e.ae(S,i,b[i]), e.ae(i,S,), e.ae(i+n,T,b[i]), e.ae(T,i+n,);
ans=Dinic();
printf("%d\n",sum-ans/);
bfs();
S=T; bfs();
return ;
}

BZOJ 3158 千钧一发 (最大流->二分图带权最大独立集)的更多相关文章

  1. hdu 1569 &1565 (二分图带权最大独立集 - 最小割应用)

    要选出一些点,这些点之间没有相邻边且要求权值之和最大,求这个权值 分析:二分图带权最大独立集. 用最大流最小割定理求解.其建图思路是:将所有格点编号,奇数视作X部,偶数视作Y部,建立源点S和汇点T, ...

  2. 二分图带权最大独立集 网络流解决 hdu 1569

    方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. 二分图带权匹配 KM算法与费用流模型建立

    [二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小.而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大 ...

  4. 二分图带权匹配、最佳匹配与KM算法

    ---------------------以上转自ByVoid神牛博客,并有所省略. [二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和 ...

  5. BZOJ 3158: 千钧一发

    3158: 千钧一发 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1201  Solved: 446[Submit][Status][Discuss ...

  6. bzoj 3158 千钧一发(最小割)

    3158: 千钧一发 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 767  Solved: 290[Submit][Status][Discuss] ...

  7. poj 2195 二分图带权匹配+最小费用最大流

    题意:有一个矩阵,某些格有人,某些格有房子,每个人可以上下左右移动,问给每个人进一个房子,所有人需要走的距离之和最小是多少. 貌似以前见过很多这样类似的题,都不会,现在知道是用KM算法做了 KM算法目 ...

  8. bzoj 3158 千钧一发——网络流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 发现偶数之间一定满足第二个条件:奇数之间一定满足第一个条件 ( \( (2m+1)^{ ...

  9. 【二分图带权匹配】Anagram @山东省第九届省赛 A

    题目描述 Orz has two strings of the same length: A and B. Now she wants to transform A into an anagram o ...

随机推荐

  1. jmeter函数和变量

    函数和变量广泛的应用在JMeter的传参过程,其中函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用. 常用函数 1.__RamdomString() / __Ramdom() 获 ...

  2. HDU 1143 Tri Tiling

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=1143 Tri Tiling Time Limit: 2000/1000 MS (Java/Others) ...

  3. 深入理解 C 指针阅读笔记 -- 第二章

    Chapter2.h #ifndef __CHAPTER_2_ #define __CHAPTER_2_ /*<深入理解C指针>学习笔记 -- 第二章*/ /* 内存泄露的两种形式 1.忘 ...

  4. eclipse中的.project 和 .classpath文件的具体作用

    .project是项目文件,项目的结构都在其中定义,比如lib的位置,src的位置,classes的位置 .classpath的位置定义了你这个项目在编译时所使用的$CLASSPATH 这些文件你用文 ...

  5. androidstudio集成ijkplayer教程

      介绍 ijkplayer是一款非常火的开源视频播放器,android和IOS通用.关于怎么编译怎么导入android Studio中自己的项目,其中坑很多,本篇记录下自己的操作记录.ijkplay ...

  6. Android平台Overlay机制【转】

    本文转载自:http://blog.csdn.net/wh_19910525/article/details/39254815 Android overlay 机制允许在不修改packages中apk ...

  7. 使用spring mvc或者resteasy构建restful服务

    看到最近一个项目里用resteasy来构建restful接口,有点不明白,不少Spring mvc4.0以后也可以很方面的实现restful服务吗,为啥还要在Spring MVC的项目里还引入rest ...

  8. 26. Remove Duplicates from Sorted Array[E]删除排序数组中的重复项

    题目 Given a sorted array nums, remove the duplicates in-place such that each element appear only once ...

  9. vmware笔试题目

    http://discuss.acmcoder.com/topic/58db8e2ebb0f44ba0e94e670 上面是完整的题目,下面一下我自己的想法. http://discuss.acmco ...

  10. LeetCode Weekly Contest 19

    1.504. Base 7 水题,直接写.但是我错了一次,忘了处理0的情况. 没有考虑边界条件.写完代码,一般需要自己想几个边界测试用例进行测试. class Solution { public: s ...