LibreOJ 6003 魔术球 (最大流)
题解:每次加入两个点,对于和为平方数的两个值所对应的点建边,反正网络流可以跑残量网络,所以就没有什么关系了……
代码如下:
- #include<cmath>
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define inf 0x3f3f3f3f
- using namespace std;
- int head[],next[],w[],v[],deep[];
- int s,t,cnt;
- void init()
- {
- cnt=-;
- memset(head,-,sizeof(head));
- memset(next,-,sizeof(next));
- }
- void add(int from,int to,int cost)
- {
- cnt++;
- next[cnt]=head[from];
- w[cnt]=cost;
- v[cnt]=to;
- head[from]=cnt;
- }
- void add_edge(int from,int to,int cost)
- {
- add(from,to,cost);
- add(to,from,);
- }
- int bfs(int s,int t)
- {
- queue<int> q;
- memset(deep,,sizeof(deep));
- deep[s]=;
- q.push(s);
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- for(int i=head[u]; i!=-; i=next[i])
- {
- if(!deep[v[i]]&&w[i]>)
- {
- deep[v[i]]=deep[u]+;
- q.push(v[i]);
- }
- }
- }
- if(!deep[t])
- {
- return ;
- }
- return ;
- }
- int dfs(int u,int t,int dist)
- {
- if(u==t)
- {
- return dist;
- }
- for(int i=head[u]; i!=-; i=next[i])
- {
- if(w[i]&&(deep[u]+==deep[v[i]]))
- {
- int di=dfs(v[i],t,min(w[i],dist));
- if(di>)
- {
- w[i]-=di;
- w[i^]=di;
- return di;
- }
- }
- }
- return ;
- }
- int dinic(int s,int t)
- {
- int ans=;
- while(bfs(s,t))
- {
- while(int d=dfs(s,t,inf))
- {
- ans+=d;
- }
- }
- return ans; //
- }
- int id[],wid[],vis[];
- void solve(int x,int &f)
- {
- int loc=wid[x];
- vis[x]=;
- for(int i=head[loc]; i!=-; i=next[i])
- {
- if(w[i]==&&v[i]!=t)
- {
- solve(v[i]/,f);
- }
- }
- if(f==)
- {
- f=;
- }
- else
- {
- putchar(' ');
- }
- printf("%d",x);
- }
- int main()
- {
- init();
- int n;
- scanf("%d",&n);
- s=;
- t=;
- int i,tmp=,ans=,tmp2=;
- for(i=; i-ans<=n+; i++)
- {
- id[i]=tmp++;
- wid[i]=tmp++;
- add_edge(s,id[i],);
- add_edge(wid[i],t,);
- for(int j=; j<i; j++)
- {
- int tmp1=sqrt(i+j);
- if(tmp1*tmp1==i+j)
- {
- add_edge(id[j],wid[i],);
- }
- }
- ans+=dinic(s,t);
- }
- tmp2=i-;
- printf("%d\n",tmp2);
- for(int i=head[t]; i!=-; i=next[i])
- {
- if(w[i]==&&!vis[v[i]/])
- {
- int f=;
- solve(v[i]/,f);
- puts("");
- }
- }
- for(int i=; i<=tmp2; i++)
- {
- if(!vis[i])
- {
- printf("%d\n",i);
- }
- }
- }
LibreOJ 6003 魔术球 (最大流)的更多相关文章
- Libre 6003 「网络流 24 题」魔术球 (网络流,最大流)
Libre 6003 「网络流 24 题」魔术球 (网络流,最大流) Description 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,4......的球. (1)每次只 ...
- LibreOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖
6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- [loj #6003]「网络流 24 题」魔术球 二分图最小路径覆盖,网络流
#6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- 洛谷 P2765 魔术球问题 (dinic求最大流,最小边覆盖)
P2765 魔术球问题 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2 ...
- cogs_396_魔术球问题_(最小路径覆盖+二分图匹配,网络流24题#4)
描述 http://cojs.tk/cogs/problem/problem.php?pid=396 连续从1开始编号的球,按照顺寻一个个放在n个柱子上,\(i\)放在\(j\)上面的必要条件是\(i ...
- P2765 魔术球问题 网络流二十四题重温
P2765 魔术球问题 知识点::最小点覆盖 这个题目要拆点,这个不是因为每一个球只能用一次,而是因为我们要求最小点覆盖,所以要拆点来写. 思路: 首先拆点,然后就是开始建边,因为建边的条件是要求他们 ...
- LOJ6003 - 「网络流 24 题」魔术球
原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...
- P2765 魔术球问题
P2765 魔术球问题 贪心模拟就可以过.........好像和dinic没啥关系 找找规律发现可以贪心放.n又灰常小. 设答案=m 你可以$O(mn)$直接模拟过去 闲的慌得话可以像我用个$se ...
- 洛谷 P2765 魔术球问题 解题报告
P2765 魔术球问题 题目描述 问题描述: 假设有\(n\)根柱子,现要按下述规则在这\(n\)根柱子中依次放入编号为\(1,2,3,\dots\)的球. \((1)\) 每次只能在某根柱子的最上面 ...
随机推荐
- POI 单元格
OI 单元格合并中的CellRangeAddress 参数: CellRangeAddress(int, int, int, int) 参数:起始行号,终止行号, 起始列号,终止列号 sheet.ad ...
- TCP报文送达确认ACK
TCP数据包中的序列号(Sequence Number)不是以报文段来进行编号的,而是将连接生存周期内传输的所有数据当作一个字节流,序列号就是整个字节流中每个字节的编号.一个TCP数据包中包含多个字节 ...
- java练习,,,从键盘输入次数,输出最大值,和
总结:你的关注,是我的动力 package com.b; import java.util.Scanner; public class YUIO { public static void main(S ...
- 乘积最大(线性dp)
乘积最大 时间限制: 1 Sec 内存限制: 128 MB提交: 4 解决: 4[提交][状态][讨论版][命题人:quanxing] 题目描述 今年是国际数学联盟确定的“2000——世界数学年” ...
- JAVA基础知识——IO
首先看一下JAVA IO的类继承关系
- 委托小结及Func用法
首先,委托是一种类型,由关键字delegate声明.确切的说,委托是一种可用于封装命名或者匿名方法的引用类型. 它类似于 C++ 中的函数指针,而且是类型安全和可靠的. 委托类型的声明与 ...
- EasyUI应用总结
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncod ...
- Directshow 采集音视频数据H264+AAC+rtmp效果还不错
从usb摄像头或者采集卡中采集效果还是不错的.
- CasperJs 入门介绍
CasperJs 是一个基于 PhantomJs 的工具,其比起 PhantomJs 可以更加方便的进行 navigation. 1.安装 CasperJS 依赖于 PhantomJS >= 1 ...
- codeforce452DIV2——F. Letters Removing
题意:给一个字符串和m个操作,每次给出l,r,c,把字符串中l-r这段区间的字符为c的字符删掉,求最后的字符串.(n,m<=2e5)线段树.注意这个区间修改和普通区间修改的区别. 他们都是用树状 ...