bzoj 3158 千钧一发——网络流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158
发现偶数之间一定满足第二个条件;奇数之间一定满足第一个条件 ( \( (2m+1)^{2}+(2n+1)^{2}=4m^{2}+4m+1+4n^{2}+4n+1 \),这是个偶数,所以 T2 的 T 一定是偶数;偶数的平方一定是4的倍数,不能有那个 +2 )。
所以如果把不合法的连起来,就是一个二分图。可以用最小割做,不合法之间的连边是 INF 这样。
注意判断第一个条件的时候不用在 12~1414222 之间二分(虽然时间和 gcd 时间一样),只需要求一下根号看看是不是整数就行了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=,M=,K=1e6+,Lm=,INF=1e9+;
int n,a[N],b[N],hd[N],xnt=,cur[N],nxt[M],to[M],cap[M];
int dfn[N],q[N],he,tl; ll s[N];
int Mx(int a,int b){return a>b?a:b;}
int Mn(int a,int b){return a<b?a:b;}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
ll Sqr(int x){return (ll)x*x;}
void add(int x,int y,int z)
{
to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;cap[xnt]=z;
to[++xnt]=x;nxt[xnt]=hd[y];hd[y]=xnt;cap[xnt]=;
}
bool chk(ll x)
{
ll k=sqrt(x);
return k*k!=x;//!=
}
bool bfs()
{
memset(dfn,,sizeof dfn);dfn[]=;
q[he=tl=]=;
while(he<=tl)
{
int k=q[he++];
for(int i=hd[k],v;i;i=nxt[i])
if(cap[i]&&!dfn[v=to[i]])
dfn[v]=dfn[k]+,q[++tl]=v;
}
return dfn[n+];
}
int dinic(int cr,int flow)
{
if(cr==n+)return flow;
int use=;
for(int& i=cur[cr],v;i;i=nxt[i])
if(cap[i]&&dfn[v=to[i]]==dfn[cr]+)
{
int tmp=dinic(v,Mn(flow-use,cap[i]));
if(!tmp)dfn[v]=;
use+=tmp;cap[i]-=tmp;cap[i^]+=tmp;
if(use==flow)return use;
}
return use;
}
int main()
{
scanf("%d",&n);int ans=;
for(int i=;i<=n;i++)scanf("%d",&a[i]),s[i]=Sqr(a[i]);
for(int i=;i<=n;i++)scanf("%d",&b[i]),ans+=b[i];
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
if(gcd(a[i],a[j])>||chk(s[i]+s[j]))continue;
a[i]&?add(i,j,INF):add(j,i,INF);
}
for(int i=;i<=n;i++)
if(a[i]&)add(,i,b[i]); else add(i,n+,b[i]);
while(bfs())memcpy(cur,hd,sizeof hd),ans-=dinic(,INF);
printf("%d\n",ans);
return ;
}
bzoj 3158 千钧一发——网络流的更多相关文章
- BZOJ 3158: 千钧一发
3158: 千钧一发 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1201 Solved: 446[Submit][Status][Discuss ...
- bzoj 3158 千钧一发(最小割)
3158: 千钧一发 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 767 Solved: 290[Submit][Status][Discuss] ...
- bzoj 3158 千钧一发 —— 最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 \( a[i] \) 是奇数则满足条件1,是偶数则显然满足条件2: 因为如果把两个奇数 ...
- BZOJ 3158 千钧一发 (最大流->二分图带权最大独立集)
题面:BZOJ传送门 和方格取数问题很像啊 但这道题不能像网格那样黑白染色构造二分图,所以考虑拆点建出二分图 我们容易找出数之间的互斥关系,在不能同时选的两个点之间连一条流量为$inf$的边 由于我们 ...
- bzoj 3158: 千钧一发【最小割】
这个条件非常妙啊,奇数和奇数一定满足1,因为\( (2a+1)^2+(2b+1)^2=4a^2+4a+4b^2+4b+2=2(2(a^2+a+b^2+b)+1) \)里面这个一定不是平方数因为除二后是 ...
- BZOJ 3158 千钧一发 最小割
分析: 偶数对满足条件2,所有奇数对满足条件1. 如果你能一眼看出这个规律,这道题就完成了一半. 我们只需要将数分为两类,a值为奇数,就从S向这个点连容量为b值的边,a值为偶数,就从这个点向T连容量为 ...
- bzoj 1189 紧急疏散 网络流
二分答案,网络流判断 将每个门拆点,每个人连向每个门的dis~当前解 然后跑最大流,如果等于人数,即为可行解 #include<cstdio> #include<iostream&g ...
- BZOJ 2561 最小生成树 | 网络流 最小割
链接 BZOJ 2561 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割: 对于最大生成树的情况也一样.容 ...
- BZOJ 1066 蜥蜴(网络流)
很普通的拆点网络流,把每个柱子拆成两个点(i,j,0)和(i,j,1).对于柱子的高度限制则加边((i,j,0),(i,j,1),height). 两个柱子能互相到达则加边((i,j,1),(i1,j ...
随机推荐
- jsp获取绝对路径
在JavaWeb开发中,常使用绝对路径的方式引入javaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法是: 一.使用${pageContext.request. ...
- iptables疑问总结(一)
1.关于-j 的return说明 1. 从一个CHAIN里可以jump到另一个CHAIN, jump到的那个CHAIN是子CHAIN.2. 从子CHAIN return后,回到触发jump的那条规则, ...
- Qt 元对象系统(Meta-Object System)
(转自:http://blog.csdn.net/aladdina/article/details/5496891) Qt的元对象系统基于如下三件事情: 类:QObject,为所有需要利用原对象系统的 ...
- yum的搭建
搭建本地yum仓库的步骤 . 创建光盘目录,挂载光盘 . 进入/etc/yum/repos.d目录下,备份所有配置文件 . 利用一个含有大写M的配置文件作为配置文件的模板 . 在模板里将enabled ...
- continue的作用
特别有用,用于循环中-跳过不满足某个条件的某轮循环continue后面的语句
- pig 自定义udf中读取hdfs 文件
最近几天,在研究怎么样把日志中的IP地址转化成具体省份城市. 希望写一个pig udf IP数据库采用的纯真IP数据库文件qqwry.dat,可以从http://www.cz88.net/下载. 这里 ...
- SDKMAN 软件开发工具包管理器
SDKMAN 是用来在类Unix 系统中管理多个版本的开发环境的工具.提供命令行接口来安装.切换.删除.列出候选版本. SDKMAN!是在大多数基于Unix的系统上管理多个软件开发套件的并行版本的工具 ...
- React-Native进阶_1.抽取样式和组件
组织应用的样式和组件 就像抽取工具类一样,放在单独的文件中,在要使用的地方去导入调用即可. 1.导出样式 Style 样式可以单独写在一个JavaScript文件中,然后导出给其他JavaScript ...
- 基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控
前言 随着互联网的发展,尤其是移动互联网,基于H5.微信的应用越来越多,企业也更多地想基于H5.微信公众号来快速开发和运营自己的产品,那么传统的安防IPC所输出的各种RTSP.GB28181.SDK视 ...
- Realm的常规使用与线程中的坑
结识 Realm 的催化剂 在我们公司的项目迭代中,由于在之前的聊天这个模块关于用户信息的传值有问题,而之前因为项目经过很多开发者的手,且不提整体的架构有多混乱,就单说缓存这块,就是乱的不行,有的地方 ...