2661: [BeiJing wc2012]连连看

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1349  Solved: 577
[Submit][Status][Discuss]

Description

凡是考智商的题里面总会有这么一种消除游戏。不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏。我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y)的平方差x2-y2是一个完全平方数z2,并且y与z互质,那么就可以将x和y连起来并且将它们一起消除,同时得到x+y点分数。那么过关的要求就是,消除的数对尽可能多的前提下,得到足够的分数。快动手动笔算一算吧。

Input

只有一行,两个整数,分别表示a,b。

Output

两个数,可以消去的对数,及在此基础上能得到的最大分数。

Sample Input

1 15

Sample Output

2 34

HINT

对于30%的数据,1<=a,b<=100

对于100%的数据,1<=a,b<=1000

Source

拆点直接连边。跑最大费用最大流,答案/2。

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
struct data {
int cost,w,to,next;
}e[];
int head[],cnt;
int S,T;
void add(int u,int v,int w,int c) {
e[cnt].to=v;e[cnt].next=head[u];e[cnt].w=w;e[cnt].cost=c;head[u]=cnt++;
e[cnt].to=u;e[cnt].next=head[v];e[cnt].w=;e[cnt].cost=-c;head[v]=cnt++;
}
int dis[];
bool vis[];
int q[],used;
bool spfa() {
memset(dis,-,sizeof(dis));
vis[T]=;dis[T]=;
int h=,t=;
q[]=T;
while(h!=t) {
int now=q[h];h++;if(h==) h=;
for(int i=head[now];i>=;i=e[i].next) {
int to=e[i].to;if(!e[i^].w) continue;
if(dis[to]<dis[now]-e[i^].cost) {
dis[to]=dis[now]-e[i^].cost;
if(!vis[to]) {vis[to]=;q[t++]=to;if(t==)t=;}
}
}
vis[now]=;
}
used=-dis[S];
return dis[S]!=dis[];
}
int ans=;
int dfs(int x,int a) {
if(x==T) {ans+=used*a;return a;}
int f=,flow=;vis[x]=;
for(int i=head[x];i>=;i=e[i].next) {
int to=e[i].to;
if(!vis[to]&&e[i].w>&&dis[to]==dis[x]+e[i].cost&&(f=dfs(to,min(e[i].w,a)))) {
e[i].w-=f;e[i^].w+=f;
a-=f;flow+=f;
if(a==) break;
}
}
return flow;
}
void zkw() {
while(spfa()) {
do {
memset(vis,,sizeof(vis));
}while(dfs(S,));
memset(vis,,sizeof(vis));
}
}
bool check(int x,int y) {
int tmp=x*x-y*y,z=(int)sqrt(tmp);
if (z*z!=tmp) return false;
if (y<z) swap(y,z);
while (z){tmp=y%z;y=z;z=tmp;}
return (y==);
}
int main() {
memset(head,-,sizeof(head));
int a,b;
scanf("%d%d",&a,&b);
S=;T=;
for(int i=a;i<=b-;i++)
for(int j=i+;j<=b;j++) if (check(j,i)) {
add(i,j+,,-i-j);
add(j,i+,,-i-j);
}
for(int i=a;i<=b;i++) {
add(S,i,,);
add(i+,T,,);
}
zkw();
int tot=;
for(int i=;i<cnt;i++) if (e[i].to==T&&!e[i].w) tot++;
printf("%d %d\n",tot/,-ans/);
}

[BZOJ2661][BeiJing wc2012]连连看 费用流的更多相关文章

  1. BZOJ 2661: [BeiJing wc2012]连连看 费用流

    2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...

  2. BZOJ2661: [BeiJing wc2012]连连看

    2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 483  Solved: 200[Submit][S ...

  3. 【费用流】bzoj2661 [BeiJing wc2012]连连看

    将每个数拆点,互相连边,然后满足条件的数对之间互相连边,跑最大费用流,答案是流量和费用分别除以2. 一定要i->j.j->i都连上,否则可能会出现一个数在一边被选择了,在另一边的另一个匹配 ...

  4. 【BZOJ2661】[BeiJing wc2012]连连看 最大费用流

    [BZOJ2661][BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给 ...

  5. BZOJ_2661_[BeiJing wc2012]连连看_费用流

    BZOJ_2661_[BeiJing wc2012]连连看_费用流 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规 ...

  6. [BeiJing wc2012]连连看

    题目链接 费用流板子+拆点 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int r ...

  7. 【bzoj2661】[BeiJing wc2012]连连看 最大费用最大流

    题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...

  8. [BeiJing wc2012]连连看(建模,最小费用最大流)

    前言 突然发现自己在图论①被dalao吊着打... Solution 看到数据范围1000,感觉可以直接枚举连边,然后新建两个点就好了. 注意要拆点,不然可能会死循环(过来人) 代码实现 #inclu ...

  9. bzoj 2661: [BeiJing wc2012]连连看

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...

随机推荐

  1. setcookie函数

    在任何请求的服务器响应都会有个头部,默认情况下,头部发送动作会在第一个输出发生时触发,如echo,<html>.(注:php有个header方法手动发送原生header) 由于setcoo ...

  2. [剑指Offer] 42.和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. [思 ...

  3. 【题解】SDOI2011消耗战

    虚树模板题~洛谷P2495 第一次写虚树,感觉好厉害呀~首先,这道题目的树形dp是非常显然的,要控制一个点&其子树所有点,要么在子树内部割边,要么直接切点该点与父亲的连边.所以dp[u]表示控 ...

  4. Why is the ibdata1 file continuously growing in MySQL?

    We receive this question about the ibdata1 file in MySQL very often in Percona Support. The panic st ...

  5. 单个回调函数中返回多个Request以及Item

    import scrapy from myproject.items import MyItem class MySpider(scrapy.Spider): name = 'example.com' ...

  6. 设置eclipse控制台上的信息输入到某个文件

    转摘自:http://binary.duapp.com/2013/09/1511.html Run->Run Configurations->Common->File

  7. ubuntu12.04回归到经典的gnome界面

    要想删除Unity恢复到经典Gnome桌面也很简单,几乎就是一条命令的事情--命令这种东西虽然不直观,但非常可靠和快捷,同时按住Ctrl+Alt+T三个键,调出系统终端,输入: sudoapt-get ...

  8. ContenOS 安装配置 rpm 版本 Jenkins

    软件准备: jenkins-2.7.4-1.1.noarch.rpm java环境 安装jenkins: [root@localhost modules]# rpm -ih jenkins-2.7.4 ...

  9. java 身份证15位转18位

    /** * 根据身份证号获取性别 * * @param pid * 身份证号 * @return 性别 F为女M为男 */ public static String getSexByPid(Strin ...

  10. Spring - IoC(4): p-namespace & c-namespace

    p 命名空间 p 命名空间允许你使用 bean 元素的属性而不是 <property/>子元素来描述 Bean 实例的属性值.从 Spring2.0 开始,Spring 支持基于 XML ...