传送门

题目描述

«问题描述:

假设有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:

  1. //By Menteur_Hxy
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. #define M(a,b) memset(a,(b),sizeof(a))
  8. const int MAX=200000;
  9. const int INF=0x3f3f3f3f;
  10. const int T=10000;
  11. int n,ans,cnt=1,s;
  12. int nxt[MAX],wi[MAX],to[MAX],head[MAX];
  13. int de[MAX],qu[MAX],cur[MAX],fa[MAX],mark[MAX];
  14. int dfs(int x,int f) {
  15. if(x==T) return f;
  16. int w,used=0;
  17. for(register int i=head[x];i;i=nxt[i])
  18. if(wi[i]&&de[to[i]]==de[x]+1) {
  19. w=dfs(to[i],min(f-used,wi[i]));
  20. wi[i]-=w,wi[i^1]+=w; used+=w;
  21. if(used==f) return f;
  22. }
  23. if(!used) de[x]=-1;
  24. return used;
  25. }
  26. bool bfs() {
  27. int h=0,t=1,now;
  28. M(de,-1); de[0]=qu[0]=0;
  29. while(h<=t)
  30. for(register int i=head[now=qu[h++]];i;i=nxt[i])
  31. if(wi[i]&&de[to[i]]==-1)
  32. de[to[i]]=de[now]+1,qu[t++]=to[i];
  33. if(de[T]==-1) return 0;
  34. return 1;
  35. }
  36. #define dinic() while(bfs()) ans-=dfs(0,INF)
  37. #define add(a,b,c) nxt[++cnt]=head[a],wi[cnt]=c,to[cnt]=b,head[a]=cnt
  38. #define insert(a,b,c) add(a,b,c),add(b,a,0)
  39. int main() {
  40. scanf("%d",&n);
  41. while(1) {
  42. ans++;s++;
  43. for(register int i=1;i<s;i++)
  44. if(sqrt(i+s)==(int)(sqrt(i+s)))
  45. insert(i,s+5000,1);
  46. insert(0,s,1); insert(s+5000,T,1);
  47. dinic();
  48. if(ans>n) break;
  49. } printf("%d\n",s-1);
  50. for(register int i=1;i<s;i++)
  51. for(register int j=head[i];j;j=nxt[j])
  52. if(!wi[j]) {fa[i]=to[j]-5000;break;}
  53. for(register int i=1;i<s;i++) {
  54. if(mark[i]) continue; int t=i;
  55. while(t!=-5000) {
  56. mark[t]=1;
  57. printf("%d ",t);
  58. t=fa[t];
  59. }
  60. puts("");
  61. }
  62. return 0;
  63. }

[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. HDU 4515

    刷水完毕,年月日,日日日日日日日日日日日日日日日日日日 #include <stdio.h> ,,,,,,,,,,,,}; ,M = ,D = ; int leap(int y) { == ...

  2. 关于Dos窗体的设置

    1.输入cmd,点击回车键.出现下图: 2.点击左上角(红框框起来的地方),进行例如以下图操作: 3.选择"属性",出现下图: 4.选择"字体"能够改动字体的大 ...

  3. python清除数据库错误日志

    # coding=gbk from encodings import gbk  import re   import sys import  os import  pyodbc import trac ...

  4. android制作闪动的红心

    先上一张效果图吧: 说说这个东西的来源吧.今天突然想到笛卡尔心形图,想去看看能不能画个心出来,可是看到一篇不错的文章,那篇文章罗列了非常多关于心形的函数方程,这可把我高兴坏了,于是我选取了一个比較好看 ...

  5. CharsRefIntHashMap并不比HashMap&lt;String, Integer&gt;快

    我模仿lucene的BytesRef写了一个CharsRefIntHashMap,实測效果并不如HashMap<String, Integer>.代码例如以下: package com.d ...

  6. Online Object Tracking: A Benchmark 论文笔记

    Factors that affect the performance of a tracing algorithm 1 Illumination variation 2 Occlusion 3 Ba ...

  7. nyoj--284--坦克大战(bfs模板)

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" i ...

  8. nyoj--106--背包问题(贪心,水题)

    背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<= ...

  9. 自己实现的一个 .net 缓存类(原创)

    public class CacheContainer { private static Hashtable ht = new Hashtable(); /// <summary> /// ...

  10. Redis Sentinel哨兵配置

    概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...