[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都连上,否则可能会出现一个数在一边被选择了,在另一边的另一个匹配 ...
随机推荐
- Cannot load JDBC driver class 'com.mysql.jdbc.Driver '
最近在学JAVA, SSM, 照着网上的例子系统启动后总是报这个错(IDE :IEDA): HTTP Status 500 - Request processing failed; nested ex ...
- BZOJ 1660 [Usaco2006 Nov]Bad Hair Day 乱发节:单调栈
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1660 题意: 有n头牛,身高分别为h[i]. 它们排成一排,面向右边.第i头牛可以看见在它 ...
- DBA日记:一次reboot导致的严重失误
昨天下午,一现场要添加RAC节点,db1节点正常运行,添加db2节点:在db2上做了安装的一些配置后,需要reboot, 于是直接就reboot:糟糕,这条命令错误地执行在db1上了,导致现场数据库直 ...
- linkedhashSet和hashSet和TreeSet的区别(转)
Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...
- 网络编程学习笔记-linux常用的网络命令
网络参数设置命令 所有时刻如果你想要做好自己的网络参数设置,包括IP参数.路由参数和无线网络等,就得要了解下面这些相关的命令才行.其中Route及ip这两条命令是比较重要的.当然,比较早期的用法,我们 ...
- MySQL活动期间订单满600元并且在活动日期之前超过30天没有下过单_20161030
计算 活动期间订单满600元并且在活动日期之前超过30天没有下过单 首先拿到这个需求,首先需要明确活动日期区间 10.29-10.31,其次要取这个时间段内某天订单额最高的那天及订单额,再次需要判断这 ...
- 洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm
题目描述 The farm has many hills upon which Farmer John would like to place guards to ensure the safety ...
- float浮动改变display类型
position:absolute和float都会隐式的改变display类型. 也就是说,不论之前是什么类型的元素(display:none除外),只要设置了position:absolute或fl ...
- vijos:P1053Easy sssp(spfa判环)
描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程序, 判断这个有向图中是否存在负权回路. 如果从一 ...
- zoom在清除浮动中的利用
zoom 是个困惑了好久的元素,今天对它有了个初步的认识 zoom , ie 的专属属性,在其他浏览器中不起作用,它的原本功能是设置或检测对象的缩放比例(只在ie下起作用) 比如 <div ...