[BeiJing wc2012]连连看
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} /********************************************************************/ struct ZKM_MinCostMaxFlow{
const static int maxn = 1e5+;
const static int maxE = 1e5+;
const static int INF = 0xfffffff; struct Edge{
int to, next, cap, flow, cost;
Edge(int _to = , int _next = , int _cap = , int _flow = , int _cost = ):
to(_to), next(_next), cap(_cap), flow(_flow), cost(_cost){}
}edge[maxE*]; int head[maxn], tot;
int cur[maxn], dis[maxn];
bool vis[maxn];
int ss, tt, N;
int min_cost, max_flow;
void init(int N){
tot = ;
for(int i = ;i < N;i++) head[i] = -;
}
int addedge(int u, int v, int cap, int cost){
edge[tot] = Edge(v, head[u], cap, , cost);
int rs = tot;
head[u] = tot++;
edge[tot] = Edge(u, head[v], , , -cost);
head[v] = tot++;
return rs;
}
int aug(int u, int flow){
if(u == tt) return flow;
vis[u] = true;
for(int i = cur[u];i != -;i = edge[i].next){
int v = edge[i].to;
if(edge[i].cap > edge[i].flow && !vis[v] && dis[u] == dis[v] + edge[i].cost){
int tmp = aug(v, min(flow, edge[i].cap - edge[i].flow));
edge[i].flow += tmp;
edge[i^].flow -= tmp;
cur[u] = i;
if(tmp) return tmp;
}
}
return ;
}
bool modify_label(){
int d = INF;
for(int u = ;u < N;u++){
if(vis[u]){
for(int i = head[u];i != -;i = edge[i].next){
int v = edge[i].to;
if(edge[i].cap > edge[i].flow && !vis[v]){
d = min(d, dis[v]+edge[i].cost - dis[u]);
}
}
}
}
if(d == INF) return false;
for(int i = ;i < N;i++){
if(vis[i]){
vis[i] = false;
dis[i] += d;
}
}
return true;
} pair<int, int> mincostmaxflow(int start, int ed, int n){
ss = start, tt = ed, N = n;
min_cost = max_flow = ;
for(int i = ;i < n;i++) dis[i] = ;
while(){
for(int i = ;i < n;i++) cur[i] = head[i];
while(){
for(int i = ;i < n;i++) vis[i] = false;
int tmp = aug(ss, INF);
if(tmp == ) break;
max_flow += tmp;
min_cost += tmp*dis[ss];
}
if(!modify_label()) break;
}
return make_pair( max_flow, min_cost );
}
}solver; int gcd(int x, int y){
if(y == ) return x;
else return gcd(y, x%y);
} bool check(int x, int y){
if(x == y) return false;
if(x < y) swap(x, y);
int t = sqrt(x*x-y*y);
if(t*t != x*x-y*y) return false;
if(gcd(y, t) != ) return false;
return true;
} int main(){
int a, b;
a = read(); b = read();
solver.init(b*+);
for(int i = a;i <= b;i++){
for(int j = a;j <= b;j++){
if(check(i, j)){
solver.addedge(i, j+b, , -i-j);
}
}
solver.addedge(b*+, i, , ); //拆点
solver.addedge(i+b, b*+, , ); //拆点
}
pair<int, int> ans = solver.mincostmaxflow(b*+, b*+, b*+);
printf("%d %d\n", ans.first/, -ans.second/);
return ;
}
[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 ...
- BZOJ_2661_[BeiJing wc2012]连连看_费用流
BZOJ_2661_[BeiJing wc2012]连连看_费用流 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规 ...
- 【BZOJ2661】[BeiJing wc2012]连连看 最大费用流
[BZOJ2661][BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给 ...
- [BZOJ2661][BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1349 Solved: 577[Submit][ ...
- 2661: [BeiJing wc2012]连连看
Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y( ...
- 【bzoj2661】[BeiJing wc2012]连连看 最大费用最大流
题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...
- bzoj 2661: [BeiJing wc2012]连连看
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...
- [BeiJing wc2012]连连看(建模,最小费用最大流)
前言 突然发现自己在图论①被dalao吊着打... Solution 看到数据范围1000,感觉可以直接枚举连边,然后新建两个点就好了. 注意要拆点,不然可能会死循环(过来人) 代码实现 #inclu ...
- 【费用流】bzoj2661 [BeiJing wc2012]连连看
将每个数拆点,互相连边,然后满足条件的数对之间互相连边,跑最大费用流,答案是流量和费用分别除以2. 一定要i->j.j->i都连上,否则可能会出现一个数在一边被选择了,在另一边的另一个匹配 ...
随机推荐
- GPS NMEA-0183协议介绍【转】
本文转载自:http://blog.csdn.net/haofeng82/article/details/4439349 找到的一篇关于GPS常用的一种协议的介绍,希望对大家有用 NMEA-0183 ...
- <关于J2EE环境的搭建>在Fedora21下的Tomcat,Mysql,jdk以及Intellij的搭建过程
题外话:一开始很不情愿写这种没有技术含量的博文,但是网上对于fedora21下的整个J2EE环境的搭建过程的文章实在是少之又少,那我就破个例吧:-p (一)JDK的下载及环境变量的设置 如果你对JDK ...
- Discuz X3游客看小图功能导致文字内容隐藏的【修复方法】
如果帖子内容以图片开始,并且开启了游客看小图功能,那么图片下面的文字也会被隐藏,这是不科学的(在图片上边的文字不会被隐藏)查看DZ源代码,发现是程序猿疏忽漏掉了</div> 下边1314学 ...
- Redis- 内存数据库Redis之安装部署
内存数据库Redis之安装部署 Redis是一款非关系型,key-value存储的内存数据库,Redis数据库完全在内存中,使用磁盘仅用于持久性.Redis的速度非常快,每秒能执行约11万集合,每秒约 ...
- python循环次数的使用
a=[str(i) for i in range(88888,88912)] b=[str(i) for i in range(77777,77785)] def f(a,b,k=0,m=0): n= ...
- matlab之sum()函数
sum(A,1):对矩阵A按照列求和: sum(A,2):对矩阵A按照行求和: 默认情况下,是按照列求和的. 举例: A=[1 2 3;1 2 3] sum(A,1)的结果: ans = 2 4 6 ...
- 分享知识-快乐自己:搭建第一个 Hibernate (Demo)
使用 Hibernate 完成持久化操作 七大 步骤: 1.读取并解析配置文件及映射文件: Configuration configuration=new Configuration().config ...
- python-unittest单元测试框架
可以理解为是已经帮我们封装好的东东,可以完成执行用例\预期与实际结果的对比等. import unittest 封装好的单元测试框架,可以直接使用 编写的测试类的继承unittest.TestCase ...
- codeforces 587B B. Duff in Beach(dp)
题目链接: B. Duff in Beach time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Spring笔记03(Spring创建对象的三种方式)
1.创建对象的三种方式和bean的生命周期的验证: Animal接口代码: package cn.pb.dao; /** * 动物接口 */ public interface Animal { //吃 ...