当前位置: 首页 > 网络知识

[luoguP2765] 魔术球问题(最大流—最小不相交路径覆盖)

时间:2026-01-29 09:37:49

传送门

枚举球的个数 num

如果 i < j && (i + j) 是完全平方数,那么 i > j' 连一条边

再加一个超级源点 s,s > i

再加一个超级汇点 t,i' > t

那么当前可以放的柱子的最小数量就是最小不相交路径数

如果当前的最小不相交路径数 > num,break

求最大流的时候别忘了记录方案

——代码

1 #include <cmath> 2 #include <queue> 3 #include <cstdio> 4 #include <cstring> 5 #include <iostream> 6 #define N 10001 7 #define M 200001 8 #define mid 5000 9 #define min(x, y) ((x) < (y) ? (x) : (y)) 10 11 int n, cnt, sum, ans, s, t = mid << 1; 12 int head[N], to[M], next[M], val[M], suc[N], dis[N]; 13 bool vis[N]; 14 15 inline int read() 16 23 24 inline void add(int x, int y, int z) 25 31 32 inline bool bfs() 33 51 } 52 } 53 return 0; 54 } 55 56 inline int dfs(int u, int maxflow) 57 72 } 73 return ret; 74 } 75 76 int main() 77 92 cnt = 0; 93 memset(head, 1, sizeof(head)); 94 for(i = 1; i < num; i++) 95 99 for(i = 1; i < num; i++) 100 for(j = 1; j < i; j++) 101 if(sqrt(i + j) == (int)sqrt(i + j)) 102 add(j, i + mid, 1), add(i + mid, j, 0); 103 while(bfs()) dfs(s, 1e9); 104 printf("%d\n", num 1); 105 for(i = 1; i < num; i++) 106 if(!vis[i]) 107 115 puts(""); 116 } 117 return 0; 118 }
View Code



上一篇:[BZOJ1031][JSOI2007]字符加密Cipher(后缀数组)
下一篇:[luoguP2854] [USACO06DEC]牛的过山车Cow Roller Coaster(DP + sort)
最大流 网络流 最小路径覆盖
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素