[BZOJ2661][BeiJing wc2012]连连看 费用流
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
Sample Output
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]连连看 费用流的更多相关文章
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...
- 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]连连看 最大费用流
[BZOJ2661][BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给 ...
- BZOJ_2661_[BeiJing wc2012]连连看_费用流
BZOJ_2661_[BeiJing wc2012]连连看_费用流 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规 ...
- [BeiJing wc2012]连连看
题目链接 费用流板子+拆点 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int r ...
- 【bzoj2661】[BeiJing wc2012]连连看 最大费用最大流
题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...
- [BeiJing wc2012]连连看(建模,最小费用最大流)
前言 突然发现自己在图论①被dalao吊着打... Solution 看到数据范围1000,感觉可以直接枚举连边,然后新建两个点就好了. 注意要拆点,不然可能会死循环(过来人) 代码实现 #inclu ...
- bzoj 2661: [BeiJing wc2012]连连看
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...
随机推荐
- OpenCV平滑处理示例代码
#include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvL ...
- maven仓库地址
使用Maven进行开发的时候,比较常见的一个问题就是如何寻找我要的依赖,比如说,我想要使用activeMQ,可是我不知道groupId,artifactId,和合适的version.怎么办呢?本文介绍 ...
- 一个flink作业的调优
最近接手了一个flink作业,另外一个同事断断续续有的没的写了半年的,不着急,也一直没上线,最近突然要上线,扔给我,要调通上线. 现状是: 1.代码跑不动,资源给的不少,但是就是频繁反压. 2.che ...
- php array_merge和“+”的区别和使用《细说php2》
php array_merge和“+”的区别和使用
- 大步小步算法模板题, poj2417
大步小步模板 (hash稍微有一点麻烦, poj不支持C++11略坑) #include <iostream> #include <vector> #include <c ...
- [bzoj1062] [NOI2008]糖果雨
Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果 ...
- [bzoj5285] [HNOI2018]寻宝游戏
Description 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你,对这个活动非常感兴趣. ...
- 安徽师大附中%你赛day5 T3 树上行走 解题报告
树上行走 题目背景 \(\mathrm{Smart}\) 的脑洞非常大, 经常幻想出一些奇怪的东西. 题目描述 某一天,\(\mathrm{Smart}\) 幻想出了一棵没有边际的二叉树,脑补着在那棵 ...
- 免费的dns服务器(更换dns服务器有时可以解决某些网站(如爱奇艺访问不了的问题))
首先百度提供的dns就是非常好用的dns,小编就把百度的dns作为首选180.76.76.76. 其次是阿里提供的dns223.5.5.5,响应速度非常的快,而且没有广告劫持. 再就是最通用的 ...
- 转:极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
转自:极小极大搜索方法.负值最大算法和Alpha-Beta搜索方法 1. 极小极大搜索方法 一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通 ...