【BZOJ2661】[BeiJing wc2012]连连看 最大费用流
【BZOJ2661】[BeiJing wc2012]连连看
Description
凡是考智商的题里面总会有这么一种消除游戏。不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏。我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y)的平方差x2-y2是一个完全平方数z2,并且y与z互质,那么就可以将x和y连起来并且将它们一起消除,同时得到x+y点分数。那么过关的要求就是,消除的数对尽可能多的前提下,得到足够的分数。快动手动笔算一算吧。
Input
只有一行,两个整数,分别表示a,b。
Output
两个数,可以消去的对数,及在此基础上能得到的最大分数。
Sample Input
Sample Output
HINT
对于30%的数据,1<=a,b<=100
对于100%的数据,1<=a,b<=1000
题解:拆点,从S向每个数的入点连一条费用0的边,从每个数的出点向T连一条费用为0的边,从每个点对的入点向出点连一条费用为-a-b的边,然后跑最小费用流,答案取相反数的1/2
#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
#include <cmath>
#define SQ(_) ((int)(sqrt(_)+1e-6)*(int)(sqrt(_)+1e-6)==_)
using namespace std;
int n,cnt,ans,sum,minn;
int head[2010],next[2000000],cost[2000000],flow[2000000],to[2000000];
int dis[2010],re[2010],rv[2010],inq[2010];
queue<int> q;
int gcd(int a,int b)
{
return (b==0)?a:gcd(b,a%b);
}
void add(int a,int b,int c)
{
to[cnt]=b,cost[cnt]=c,flow[cnt]=1,next[cnt]=head[a],head[a]=cnt++;
to[cnt]=a,cost[cnt]=-c,flow[cnt]=0,next[cnt]=head[b],head[b]=cnt++;
}
int bfs()
{
int i,u;
memset(dis,0x3f,sizeof(dis));
q.push(0),dis[0]=0;
while(!q.empty())
{
u=q.front(),q.pop();
inq[u]=0;
for(i=head[u];i!=-1;i=next[i])
{
if(flow[i]&&dis[to[i]]>dis[u]+cost[i])
{
dis[to[i]]=dis[u]+cost[i];
re[to[i]]=i,rv[to[i]]=u;
if(!inq[to[i]])
{
q.push(to[i]);
inq[to[i]]=1;
}
}
}
}
return dis[2*n+1]<0;
}
int main()
{
int i,j,a,b;
memset(head,-1,sizeof(head));
scanf("%d%d",&a,&b);
n=b-a+1;
for(i=a;i<=b;i++)
for(j=a;j<i;j++)
if(SQ(i*i-j*j)&&gcd(i,j)==1)
add(i-a+1,j-a+1+n,-i-j),add(j-a+1,i-a+1+n,-i-j);
for(i=1;i<=n;i++) add(0,i,0),add(i+n,2*n+1,0);
while(bfs())
{
minn=1<<30;
for(i=2*n+1;i;i=rv[i]) minn=min(minn,flow[re[i]]);
sum+=minn,ans+=minn*dis[2*n+1];
for(i=2*n+1;i;i=rv[i]) flow[re[i]^1]+=minn,flow[re[i]]-=minn;
}
printf("%d %d",sum>>1,-ans>>1);
return 0;
}
【BZOJ2661】[BeiJing wc2012]连连看 最大费用流的更多相关文章
- BZOJ_2661_[BeiJing wc2012]连连看_费用流
BZOJ_2661_[BeiJing wc2012]连连看_费用流 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规 ...
- [BZOJ2661][BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1349 Solved: 577[Submit][ ...
- BZOJ2661: [BeiJing wc2012]连连看
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 483 Solved: 200[Submit][S ...
- 【费用流】bzoj2661 [BeiJing wc2012]连连看
将每个数拆点,互相连边,然后满足条件的数对之间互相连边,跑最大费用流,答案是流量和费用分别除以2. 一定要i->j.j->i都连上,否则可能会出现一个数在一边被选择了,在另一边的另一个匹配 ...
- 【bzoj2661】[BeiJing wc2012]连连看 最大费用最大流
题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...
- [BeiJing wc2012]连连看
题目链接 费用流板子+拆点 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int r ...
- [BeiJing wc2012]连连看(建模,最小费用最大流)
前言 突然发现自己在图论①被dalao吊着打... Solution 看到数据范围1000,感觉可以直接枚举连边,然后新建两个点就好了. 注意要拆点,不然可能会死循环(过来人) 代码实现 #inclu ...
- BZOJ2661 连连看 (费用流)
把所有点拆成两个,将符合条件的两个点x,y连上边,流量为1,费用为-(x+y). 做一遍最小费用最大流,最后ans div 2即可. Program bzoj2661; ; ..] of longin ...
随机推荐
- 批量改名的多种方法stu_3_finished.jpg 去掉finished,stu_{1..20}_finished.jpg
方法一:rename修改文件名 rename "finished" "" *.jpg [root@ob1 scripts]# rename "fini ...
- Cygwin镜像使用帮助
Cygwin镜像使用帮助 收录架构 x86 x86_64 收录版本 所有版本 更新时间 每12小时更新一次 使用说明 选择从互联网安装, 在"User URL"处输入以下地址 ...
- Unix 系统下的 Nginx 1.4.x
Unix 系统下的 Nginx 1.4.x 本文档包括使用 PHP-FPM 为 Nginx 1.4.x HTTP 服务器安装和配置 PHP 的说明和提示. 本指南假定您已经从源代码成功构建 Nginx ...
- Mysql 常用工具
mysqladmin:用于管理MySQL服务器的客户端 mysqladmin是一个执行管理操作的客户程序.可以用它来检查服务器的配置和当 前的状态,创建并删除数据库等等. 这样调用mysqladmin ...
- MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
工程需要加上各个路径: 库使用需要几个文件: 1.include 文件夹 c/c++ /常规/附加包含目录 Connector/c++ 的安装版里面的Include 文件夹.或者把 /driver以及 ...
- 页面装载js及性能分析方法
一.装载 先装载静态页面的引用js文件,然后查找引用文件中是否包含onload函数,比如main.js中包含onload函数,在main.js中查找是否有对其他js文件的引用,优先装载引用js文件,被 ...
- Geometric deep learning on graphs and manifolds using mixture model CNNs
Monti, Federico, et al. "Geometric deep learning on graphs and manifolds using mixture model CN ...
- Hibernate Query Language查询:
Hibernate Query Language查询: Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供 ...
- nginx报错:No package erlang available
问题 yum install erlang 报错:No package erlang available 同样的,如果我们在安装nginx的时候出现"No package nginx ava ...
- Spring 4 官方文档学习(十)数据访问之OXM
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/oxm.html Java Object 与 XML ...