[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都连上,否则可能会出现一个数在一边被选择了,在另一边的另一个匹配 ...
随机推荐
- media server died的解决方法【转】
本文转载自:https://blog.csdn.net/class_brick/article/details/78086261 在对MediaRecord进行初始化时添加上 mMediaRecord ...
- RQNOJ 140 分配时间:dp
题目链接:https://www.rqnoj.cn/problem/140 题意: 小王参加的考试是几门科目的试卷放在一起考,一共给t分钟来做. 他现在已经知道第i门科目花k分钟可以拿到w[i][k] ...
- tensorflow实现svm多分类 iris 3分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)
# Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement the gaussi ...
- 程序猿老公去米国参加 WWDC,顺便想带渡老婆蜜月,如何办签证?
这个问题要拆开描述比较好:1. 老公是苹果开发者,抽中了2014 WWDC购票机会,打算自费去参加.如果自己成行,应该办何种签证?2. 顺带,两人新婚半年还未安排蜜月,打算提前几天过去先游览一下西海岸 ...
- Java丨角色权限控制——数据库设计
相信各位读者对于角色权限管理这个需求并不陌生.那么是怎么实现的呢?今天小编来说道说道! 1.首先我们来进行数据库的设计,如何设计数据库是实现权限控制的关键: 1)用户表: id:主键.自增.int n ...
- unity3d mvvm c#
using UnityEngine; using System.Collections; public interface IState { void BeforEnter(); void Befor ...
- linux命令学习笔记:cut详解
cut命令从文件的每一行剪切字节.字符和字段并将它们写至标准输出.它是以文件的每一行作为处理对象的. 命令格式:cut [选项] [范围] 文件.选项用来指定单位(字节.字符还是字段),范围指定选项的 ...
- Spring 配置 详细
一.连接池概述 数据库连接池概述: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指 ...
- ACM学习历程—HDU4725 The Shortest Path in Nya Graph(SPFA && 优先队列)
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...
- Http客户端跳转和服务器端跳转的区别
服务器端跳转: 服务器转发全程是没有客户端参与的,都在web container容器内部进行,没有任何服务器和客户端的通信,实际就是服务器内部的跳转. 这次forward, 服务器没有构建H ...