「SCOI2015」小凸玩矩阵 解题报告】的更多相关文章

「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完备匹配啊,k个鬼的m 又换回二分图匹配... Code: #include <cstdio> #include <cstring> #include <cctype> #include <algorithm> #define koito_yuu 1 using…
「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表\(i\)号点子树最后连出去的一个点连的是它第\(j\)层的祖先 \(f_{i,j}\)代表\(i\)号点子树最后连出去的一个点连的是它第\(j\)层祖先的另一个儿子 然后我们就可以拼子树,做换根了 要讨论只有一个儿子的情况 Code: #include <cstdio> #include <…
#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 N NN 个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的 N NN 个数中第 K KK 大的数字的最小值是多少. 输入格式 第一行给出三个…
「SCOI2015」小凸玩矩阵 思路: 二分+最大流: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300 #define maxque 666666 #define INF 0x3f3f3f3f ],cnt,s,t; ],que[maxque<<]; inline void in(int &now) { ; ')Cget=getchar(); ') { now=now*+Cget-'; Cg…
#2006. 「SCOI2015」小凸玩矩阵   题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 N NN 个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的 N NN 个数中第 K KK 大的数字的最小值是多少. 输入格式 第一行给出三个整数 N NN.M MM.K KK.接下来 N NN 行,每行 M MM 个数字,用来描述这个矩阵. 输出格式 输出选出来的 N NN 个数中…
「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include <cstdio> #include <cmath> #include <algorithm> #define Vector Point const int N=2e5+10; const double eps=1e-7; int n,m,l,r; struct Point {…
「SCOI2015」小凸解密码 题意:给一个环,定义一段连续的极长\(0\)串为\(0\)区间,定义一个位置的离一个\(0\)区间的距离为这个位置离这个区间中\(0\)的距离的最小值,每次询问一个位置,求离它最远的\(0\)区间与它的距离,带修改 于是我是多sb才会想到在点分裂平衡树上做类似三分的sb操作? 而且我现在的代码还是错的,只有srand的fhq才能过,不过根据对拍,错误概率很小. 思路,在平衡树上维护\(0\)区间的相对位置 然后每个点维护子树最左区间和子树最右区间 我们把每个询问的…
题解 又是美好的一天,我今天的小目标是LOJ刷题数名次前进两名(虽然巨佬们都是BZOJ千题啊这样的><,我就在LOJ划划水吧,我永远喜欢LOJ 这道题要求K大值最小,又是什么什么大值最小,这已经很暗示了,因为K大值和K小值显然等价,怎么不说小值最小?就是暗示你二分嘛 那我们就在值域上二分一个K大值 t,然后在矩阵里把所有小于等于t的数改成0,所有大于t的数改成1,我们只要能选N - K + 1个0出来,我们就可以判断真正的K大值最小解一定小于等于t 这个可以行列拆点跑二分图匹配 复杂度\(O(…
想了挺久没想出来,一看题解恍然大悟.一个数对应一行和一列,二分答案,凡是小于等于答案的就连边.如果满足能够取出 \(n - k + 1\) 个不比二分中点 \(mid\) 大的数,那么r = mid,不然l = mid + 1. 为什么是要求 \(n - k + 1\) 个不大于答案的数,而不是 \(k\) 个不小于答案的数呢?因为后者无法保证能够取出 \(n\) 个数.比方说: 样例 3 4 2 1 5 6 6 8 3 4 3 6 8 6 3 \(1\) 满足能够取出 \(k\) 个不小于它的…
题目链接 问题分析 题目给了充足的暗示,我们只需要二分答案然后跑匈牙利即可.要相信匈牙利的速度 参考程序 #include <bits/stdc++.h> using namespace std; const int Maxn = 310; const int INF = 2147483647; int N, M, K, A[ Maxn ][ Maxn ], Max, Min; int Map[ Maxn ][ Maxn ], Vis[ Maxn ], Mx[ Maxn ], My[ Maxn…