loj #6003. 「网络流 24 题」魔术球(二分匹配 优化建图)
来源:互联网 发布:服装电脑排版软件 编辑:程序博客网 时间:2024/06/03 19:26
#6003. 「网络流 24 题」魔术球
内存限制:256 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:Special Judge
上传者: 匿名
题目描述
输入格式
输出格式
样例
数据范围与提示
把每个柱子当成一条路径,能构成完全平方数的两个数当成连通的两个点 最大流||二分匹配的模型就构建好了
一开始从从小到大建图 每次都要初始化 T了 学了一下大神的优化建图 。。。就是从大向小建图 这样每次就不用初始化了 因为二分匹配的实质 就是 更改以前的匹配当不会
更改最优的情况时 才更改匹配 所以如果不是最优则不会更改匹配 所以以前的最优匹配也不会因后加入的节点而更改
那么枚举球的数量即可 当独立子集数大于n时break;
(注:这题也可以贪心解,即每一个球都从前往后扫 能放就放)
#include <iostream>#include <cstdio>#include <cstring>#include <bits/stdc++.h>using namespace std;typedef long long LL ;const int inf = 500;const int N = 4000;const double eps = 1e-7;struct node{ int to, next;} p[1000000];int head[N], cnt;int match[N], w[N];bool vis[N];void init(){ memset(head,-1,sizeof(head)); memset(match,-1,sizeof(match)); memset(w,0,sizeof(w)); cnt=0; return ;}void add(int u,int v){ p[cnt].to=v,p[cnt].next=head[u]; head[u]=cnt++; return ;}int dfs(int u){ for(int i=head[u]; i!=-1; i=p[i].next) { int v=p[i].to; if(vis[v]) continue; vis[v]=1; if(match[v]==-1||dfs(match[v])) { match[v]=u,w[u]=v; return 1; } } return 0;}int ans[N];int num,o=2000, k;void solve(){ num++; for(int i=1; i<num; i++) if(sqrt(i+num)==(int)sqrt(i+num)) add(num,i+o); memset(vis,0,sizeof(vis)); k+=dfs(num); return ;}int main(){ init(); int n; scanf("%d", &n); num=0,k=0; while(1) { solve(); if(num-k>n) break; } num--; printf("%d\n",num); k=0; for(int i=1; i<=num; i++) if(!w[i]) ans[++k]=i; for(int i=1; i<=k; i++) { printf("%d",ans[i]); int x=o+ans[i]; while(match[x]!=-1) { printf(" %d",match[x]); x=o+match[x]; } puts(""); } return 0;}
阅读全文
0 0
- loj #6003. 「网络流 24 题」魔术球(二分匹配 优化建图)
- [Loj]#6003. 「网络流 24 题」魔术球
- 【loj】#6003. 「网络流 24 题」魔术球(贪心)
- 【loj】#6000. 「网络流 24 题」搭配飞行员(二分图匹配)
- 【loj】#6004. 「网络流 24 题」圆桌聚餐(二分图匹配)
- 【loj】#6006. 「网络流 24 题」试题库(二分图匹配)
- loj #6002. 「网络流 24 题」最小路径覆盖(二分匹配)
- 【LOJ】6002 「网络流 24 题」最小路径覆盖 二分图
- 【loj】#6007. 「网络流 24 题」方格取数(二分图最大点权独立集)
- 网络流24题 魔术球问题(弱化?)(二分图解)
- [Loj] #6000. 「网络流 24 题」搭配飞行员
- [Loj]#6001. 「网络流 24 题」太空飞行计划
- [Loj]#6004. 「网络流 24 题」圆桌聚餐
- 396. [网络流24题]魔术球问题(简化版)(网络流+二分答案)
- 「网络流 24 题」魔术球
- 「网络流 24 题」魔术球
- 【loj】#6001. 「网络流 24 题」太空飞行计划(最大权闭合子图)
- LOJ 「网络流 24 题」太空飞行计划(最大权闭合子图)
- HTML route点击不同按钮,显示不同内容,可以改变按钮背景颜色
- 发布前必须排查的Web安全
- Angular4中使用RxJS Observable的scan运算符 Operator '+' cannot be applied to types '{}'异常
- PullToRefreshListView的xml布局
- push 转场动画
- loj #6003. 「网络流 24 题」魔术球(二分匹配 优化建图)
- JAVA内部类使用小结
- OKHttp使用详解,步骤挺详细的,适合初学者使用!
- JAVA-EntrySet备忘录
- 创建与使用DLL项目常见错误和解决办法
- Field的getModifiers()方法返回int类型值表示该字段的修饰符
- 使用Merge存储引擎实现 mysql分表
- Appium 使用wifi连接多台手机方法
- 从程序员之死看 IT 人士如何摆脱低情商诅咒——转载自CSDN官方博客