传送门

题目描述

«问题描述:

假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。

(1)每次只能在某根柱子的最上面放球。

(2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。

试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。

«编程任务:

对于给定的n,计算在n根柱子上最多能放多少个球。

输入输出格式

输入格式:

第1 行有1个正整数n,表示柱子数。

输出格式:

程序运行结束时,将n 根柱子上最多能放的球数以及相应的放置方案输出。文件的第一行是球数。接下来的n行,每行是一根柱子上的球的编号。

输入输出样例

输入样例#1:

4

输出样例#1:

11

1 8

2 7 9

3 6 10

4 5 11

题解

枚举答案,一直到全部连边,一直枚举到最小路径覆盖数刚好超过n为s,那么s-1即为最优解

code:

//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std; #define M(a,b) memset(a,(b),sizeof(a))
const int MAX=200000;
const int INF=0x3f3f3f3f;
const int T=10000;
int n,ans,cnt=1,s;
int nxt[MAX],wi[MAX],to[MAX],head[MAX];
int de[MAX],qu[MAX],cur[MAX],fa[MAX],mark[MAX]; int dfs(int x,int f) {
if(x==T) return f;
int w,used=0;
for(register int i=head[x];i;i=nxt[i])
if(wi[i]&&de[to[i]]==de[x]+1) {
w=dfs(to[i],min(f-used,wi[i]));
wi[i]-=w,wi[i^1]+=w; used+=w;
if(used==f) return f;
}
if(!used) de[x]=-1;
return used;
} bool bfs() {
int h=0,t=1,now;
M(de,-1); de[0]=qu[0]=0;
while(h<=t)
for(register int i=head[now=qu[h++]];i;i=nxt[i])
if(wi[i]&&de[to[i]]==-1)
de[to[i]]=de[now]+1,qu[t++]=to[i];
if(de[T]==-1) return 0;
return 1;
} #define dinic() while(bfs()) ans-=dfs(0,INF)
#define add(a,b,c) nxt[++cnt]=head[a],wi[cnt]=c,to[cnt]=b,head[a]=cnt
#define insert(a,b,c) add(a,b,c),add(b,a,0)
int main() {
scanf("%d",&n);
while(1) {
ans++;s++;
for(register int i=1;i<s;i++)
if(sqrt(i+s)==(int)(sqrt(i+s)))
insert(i,s+5000,1);
insert(0,s,1); insert(s+5000,T,1);
dinic();
if(ans>n) break;
} printf("%d\n",s-1);
for(register int i=1;i<s;i++)
for(register int j=head[i];j;j=nxt[j])
if(!wi[j]) {fa[i]=to[j]-5000;break;}
for(register int i=1;i<s;i++) {
if(mark[i]) continue; int t=i;
while(t!=-5000) {
mark[t]=1;
printf("%d ",t);
t=fa[t];
}
puts("");
}
return 0;
}

[luogu2765 网络流24题] 魔术球问题 (dinic最大流)的更多相关文章

  1. COGS396. [网络流24题]魔术球问题(简化版

    问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,4......的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平 ...

  2. 网络流24题——魔术球问题 luogu 2765

    题目描述:这里 这道题是网络流问题中第一个难点,也是一个很重要的问题 如果直接建图感觉无从下手,因为如果不知道放几个球我就无法得知该如何建图(这是很显然的,比如我知道 $1+48=49=7^2$ ,可 ...

  3. LIbreOJ #6011. 「网络流 24 题」运输问题 最小费用最大流

    #6011. 「网络流 24 题」运输问题 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  4. Cogs 731. [网络流24题] 最长递增子序列(最大流)

    [网络流24题] 最长递增子序列 ★★★☆ 输入文件:alis.in 输出文件:alis.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 给定正整数序列x1,-, xn. ( ...

  5. P2764 [网络流24题]最小路径覆盖问题[最大流]

    地址 这题有个转化,求最少的链覆盖→即求最少联通块. 设联通块个数$x$个,选的边数$y$,点数$n$个 那么有 $y=n-x$   即  $x=n-y$ 而n是不变的,目标就是在保证每个点入度.出度 ...

  6. CGOS461 [网络流24题] 餐巾(最小费用最大流)

    题目这么说的: 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. 购买新的餐巾,每块需p分: 把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f< ...

  7. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  8. 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)

    传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...

  9. [网络流24题] 太空飞行计划问题 (最大流->最大权闭合图)

    洛谷传送门 LOJ传送门 做这道题之前建议先看这篇论文,虽然论文里很多地方用了很多术语,但hbt神犇讲得很明白 这篇题解更加偏向于感性理解 把问题放到二分图上,左侧一列点是实验,权值为$p[i]$,右 ...

随机推荐

  1. 孟晓阳:IT运行监控系统设计与使用心得

    http://www.cn-healthcare.com/article/20160325/content-482138.html

  2. MYSQL 技术内幕 博客学习

    http://blog.csdn.net/CCyutaotao/article/category/6147849/3

  3. LeetCode之RemoveElement

    题目: Given an array and a value, remove all instances of that value in place and return the new lengt ...

  4. impdp时卡住,DW等待library cache lock

    同事反映impdp时在SCHEMA_REPORT/TYPE/TYPE_SPEC步骤卡住,1个多小时后也没有响应, 查下v$session: select program,sid, event,bloc ...

  5. Mysql经常使用函数汇总

    一. 聚合函数 1.1 求和函数-----SUM() 求和函数SUM( )用于对数据求和.返回选取结果集中全部值的总和. 语法:SELECT SUM(column_name) FROM table_n ...

  6. ubuntu之修改ls显示颜色

    Linux 系统中 ls 文件夹的痛苦我就不说了,为了不伤眼睛,一般 ssh 终端背景都用的黑色,文件夹又是你妈的深蓝色,每次看文件夹都要探头仔细去看.这下彻底解决这个问题.   因为ubuntu下的 ...

  7. javaWeb中URLEncoder.encode编码需要调用两次

    今天碰到一个问题,在Controller类中一个方法跳转到该类中的另一个方法,带着中文参数,在跳转之前对该参数进行编码: msg = java.net.URLEncoder.encode(msg,&q ...

  8. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  9. Spring《八-一》CGLIB代理和自动代理

    CGLIB代理 配置文档 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFac ...

  10. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(十)

    下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 这篇博文,包括了,实际生产开发非常重要的,单元测试和调试代码.这里不多赘述,直接送上代码. MRUni ...