【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 ...
随机推荐
- js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- EasyUI 搜索框
1.用法 (1).从标记创建.把 'easyui-searchbox' class 加入到 <input> 标记. <script type="text/javascrip ...
- 10 个强大的JavaScript / jQuery 模板引擎推荐
模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档.由于在开发过程中,网站或应用程序的界面与数据实现分离,大大提升了开发效率,良好的设计也使得代码重用变得更加容易. 本文 ...
- hadoop job解决大数据量关联时数据倾斜的一种办法
转自:http://www.cnblogs.com/xuxm2007/archive/2011/09/01/2161929.html http://www.geminikwok.com/2011/04 ...
- mssql 设置id自增 设置主键
主键自增长列在进行数据插入的时候,很有用的,如可以获取返回的自增ID值,接下来将介绍SQL Server如何设置主键自增长列,感兴趣的朋友可以了解下,希望本文对你有所帮助 1.新建一数据表,里 ...
- php 删除目录
<?php /* 自定义的删除函数,可以删除文件和递归删除文件夹 */ function my_del($path)//自定义my_del函数,函数有一个参数($path).当调用my_del( ...
- Spring in Action 4th 学习笔记 之 AOP
前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...
- 在tomcat下context.xml中配置各种数据库连接池(JNDI)
1. 首先,需要为数据源配置一个JNDI资源.我们的数据源JNDI资源应该定义在context元素中.在tomcat6版本中,context元素已经从server.xml文件中独立出来了,放在一个 ...
- C# 过滤sql特殊字符方法集合
1./// <summary> /// 过滤不安全的字符串 /// </summary> /// <param name="Str" ...
- Android学习CursorWrapper与Decorator模式 (转至http://www.cnblogs.com/bastard/archive/2012/05/31/2527944.html)
一 Decorator模式 意图: 动态的给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 动态的给一个对象,而不是对整个类添加额外职责,说明此模式将采用的结 ...