【luogu P3410 拍照】 题解】的更多相关文章

题目链接:https://www.luogu.org/problemnew/show/P3410 这个题就是求一个最大权闭合图 在一个图中,一些点构成一个集合,且集合中的出边指向的终点也在这个集合中,则我们称这个集合为闭合图. 整个图中点的权值之和最大的闭合图,为最大权闭合图. 最大权闭合图可以用网络流来求 造出一个超级源点S和一个超级汇点T,把S连边到所有带有正权的点上,容量是这个点的权:把所有带负权的点连边到T,容量是这个点的权的相反数.原来的边呢,把它们的容量都设成无限大. (带负权的是员…
洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权值,那么最大权闭合子图就是权值最大的那个闭合子图. (或者说对于一个点集,这个点集中所有点的出边所指向的点都在此点集中) 求解 超级源点向每个权值为正的点连边,容量为该点权值 每个点权为负的点向超级汇点连边,容量为该点权值相反数 原图中的变,容量为inf 然后跑最小割(最大流) 最后用正点权的总和-…
洛谷 P3410 拍照 题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的!!!对于每个下属,如果他带了那么小B需要给他一些钱,保证当他拍照时配合. 请问,小B的净收益最多是多少. 输入输出格式 输入格式: 第1行有2个正整数m和n(0<m,n<=100).接下来的m行,每行是一个要求拍照的人的有关数据.第一个数是他同意支付该合影的费用:接着是该…
题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的!!!对于每个下属,如果他带了那么小B需要给他一些钱,保证当他拍照时配合. 请问,小B的净收益最多是多少. 输入输出格式 输入格式: 第1行有2个正整数m和n(0<m,n<=100).接下来的m行,每行是一个要求拍照的人的有关数据.第一个数是他同意支付该合影的费用:接着是该合影需要的若干下属的编号…
漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P3410 题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的!!!对于每个下属,如果他带了那么小B需要给他一些钱,保证当他拍照时配合. 请问,小B的净收益最多是多少. 输入输出格式 输入格式: 第1行有2个正整数m和n(0<m,n<=100).接下来…
题目链接:https://www.luogu.org/problemnew/show/P3946 交好几遍是因为虽然能过一直有提醒..强迫症qwq #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 5 * 1e6 + 10; ll n, m, s, t, g, q; ll dis[maxn], h[maxn], l[maxn]; bool vis[maxn]; struct e…
其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法,如果你无法将他卡到错误,那么他就是对的 所以,就产生了下面的科学随机写法 随机化顺序,模拟过程,取ans最小值 code #include<bits/stdc++.h> using namespace std; const int MAXN=20; void file(string s){freo…
题目大意 给定一棵树,边带权,问有多少点对满足二者间距离$\leq K$,$n \leq 40000$. 题解 点分治专题首杀!$Jackpot!$ (本来看着题意比较简单想捡个软柿子捏,结果手断了……) 点分治的总结先鸽着,这里只说题解. 分析一下题目: 对于无根树上的某一节点x,如果把它看作根,树上的路径无非两类: 1.经过x. 2.不经过x,但在它的子树里. 显然,后者利用点分治的思想经过递归处理可以转化为前者,那么我们就只需考虑第一类, 这也是点分治的强大之处. 我们设$dis[]$为节…
前言: 当时考场上并没有想出来...后来也是看了题解才明白 解析: 大家(除了我)都知道,奇点和偶点会成对出现,而出现的前提就是建筑的高度突然发生变化.(这个性质挺重要的,我之前没看出来) 所以就可以扫一遍,然后就搞定了. 然后还有一个小点,要把每个区间搞成左闭右开,否则碰到诸如 (3,7,5)和(5,8,9) 这样的数据,中间的空隙就不会被计算. 然后写个线段树维护一下就ok了 代码 #include <bits/stdc++.h> using namespace std; const in…
题目传送门 [题目大意] 给定一个n×n的点方阵,求站在左下角的点能看到的点数 注意同一条直线上只能看到一个点 [思路分析] 因为是一个方阵,所以可以对称地算,那么对于半个方阵,这里假设是左上的半个方阵,能看到的点的个数要满足这样的条件 1.x<y 因为是左上的半个方阵,并且x=y的一直线上的点要额外计算 2.gcd(x,y)即x与y互质 这是为了保证一直线上只能看到一个点 容易发现,在满足条件的情况下,这样的x个数恰好等于φ(y) 还需要注意的一点是,最左边一列,最下面一行,还有x=y这条直线…
一道不是十分水的\(dp\). 首先我们考虑\(dp\)方程的构造.起初我定义的状态是\(dp_{i,j}\)表示前\(i\)个格子,总共跳了\(j\)次的最大得分.但事实上它并不可以转移,因为我们不知道新的一轮操作从之间的哪个格子算起. 那么状态转移方程就出来了,我们把第一维改成本次跳到第\(i\)个格子上,包括本次在内总共跳了\(j\)次的最大得分,那么转移的时候,由于本次一定要跳到\(i\)上(如状态中所定义),所以不用分类讨论.方程就是:\[dp_{i,j}=\max\{dp_{k,j-…
差不多是Dijkstra的裸题吧... 这道题可以分为来回两个阶段. 去的时候很简单,直接用一次Dijkstra,然后统计答案. 回来的时候就有些巧妙了,虽然表面上是每个点回到起点,但是何尝不可将其看成从起点出发,逆着每个点过来的路去找一次每个点?所以只需要存边的时候处理一下,然后直接跑Dijkstra就行了. 附上代码. #include<bits/stdc++.h> #define clean(a,i) memset(a,i,sizeof(a)) #define ll long long…
这道题问的是一群人要和另一群人合影,每个客人都有必须在场的人全部在场才能在场,每个客人给的有收入,但是邀请也需要支出,问最大收入? 我觉得可以总结为一类问题,就是有先决条件的网络流问题.看到费用和支出我本来以为是费用流问题,但是想着想着发现这道题似乎和费用流没什么关系.费用流的决策并不符合这里的题意.本来是想客人和主人连边,起点到客人,汇点到主人之间连上容量为客人需要主人陪的数量的边,跑一下dinic再遍历前向星检测就行了.然而开幕雷击发生了,这种做法只有60,怎么改也没能更高. 然后想了半天就…
加工生产调度 题目描述 某工厂收到了 n n n 个产品的订单,这 n n n 个产品分别在 A.B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工. 某个产品 i i i 在 A.B 两车间加工的时间分别为 A i , B i A_i,B_i Ai​,Bi​.怎样安排这 n n n 个产品的加工顺序,才能使总的加工时间最短. 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A.B 两车间加工完毕的时间. 输入格式 第一行仅-个整数 n n n,表示产品的数…
题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<stack> #include<cstdio> #include<cstring> #include<algorithm> #define rep(a,b,c) for(int a = b;a <= c;++ a) #define gc getchar() #defi…
传送门 官方题解(证明都在这) 神仙题鸭qwq 转化模型,发现这题本质就是一个集合,每次可以加上集合里的数,问可以拼出多少不同的数 首先暴力需要膜意义下的最短路,例题戳这 然后这个暴力可以优化成N^2的.具体操作是枚举每个数,然后从某个点只用这个数往后跳,这样在膜m意义下可以形成\(gcd(a,m)\)个环.每个环找到dis最小的点,从这个点开始依次遍历整个环,更新后一个位置 有个结论是集合中的数可以分成\(logn\)个等差数列,所以可以每个等差数列贡献答案 然后对于每个等差数列,先把膜m意义…
题目链接 luogu P4178 Tree 题解 点分治 代码 // luogu-judger-enable-o2 #include<cstdio> #include<algorithm> inline int read() { int x = 0,f = 1 ; char c = getchar(); while(c < '0' || c > '9') c = getchar(); while(c <= '9' && c >= '0') x…
题目链接 luogu P1663 山 题解 只需要求出下凸包的最低点就好了 显然是由两个斜率相反的直线相交来的 盼下最低点为直线的情况 代码 #include<cstdio> #include<iostream> #include<algorithm> inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c…
题目链接 luogu P1401 城市 题解 二分最小边权,dinic检验 代码 // luogu-judger-enable-o2 /* 二分最小边权,dinic检验 */ #include<queue> #include<cctype> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> inline int read() { int x…
题目链接 luogu [TJOI2007]线段 题解 dp[i][0/1]第i行在左/右端点的最短路 瞎转移 代码 #include<bits/stdc++.h> using namespace std; inline int read() { int x= 0 ,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c <= '9' &&c >= '0')x =…
题目链接 luogu P4115 Qtree4 题解 动态点分治,和上一题一样.同样三个堆.就是带权,用边权替换深度就好 为什么要单独写这个题解呢,因为我卡常卡了一天....据说树剖比rmq快? 在第24次AC 同样也有更有做法 代码 #include<queue> #include<cstdio> #include<cctype> #include<algorithm> /*char ch; char buf[100000],*p1 = buf,*p2 =…
题目链接 请看luogu第一篇题解 #include<cstdio> #include<algorithm> #include<cstring> #include<cctype> #include<cstdlib> #include<cmath> #define maxn 300 using namespace std; double f[maxn][maxn]; double g[maxn]; double p[maxn]; dou…
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮? 输入输出格式 输入格式: 输入共2行. 第1行包含1个正整数n表示…
[BZOJ1901][Luogu2617]Dynamic Ranking(主席树,树状数组) 题面 神TM BZOJ权限题 Luogu真良心 题解 如果不考虑修改 很容易的主席树区间第K大 考虑修改 那么修改操作复杂度\(O(nlogn)\) 因此,将区间的和利用树状数组来维护 修改复杂度降为\(O(log^2n)\) 虽然查询的复杂度升为\(O(log^2n)\) 但是整体复杂度变为\(O(mlog^2n)\) 于是就愉快的AC了 #include<iostream> #include<…
[BZOJ3282]Tree (Link-Cut Tree) 题面 BZOJ权限题呀,良心luogu上有 题解 Link-Cut Tree班子提 最近因为NOIP考炸了 学科也炸了 时间显然没有 以后再来填LCT的坑 这种题目直接上代码了.. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<alg…
正解:容斥+Lucas定理+组合数学 解题报告: 传送门! 先mk个我不会的母函数的做法,,, 首先这个题的母函数是不难想到的,,,就$\left (  1+x_{1}^{1}+x_{1}^{2}+...+x_{1}^{f_{1}}\right )\cdot\left (  1+x_{2}^{1}+x_{2}^{2}+...+x_{2}^{f_{2}}\right )\cdot...\cdot\left (  1+x_{n}^{1}+x_{n}^{2}+...+x_{n}^{f_{n}}\rig…
发现写算法专题老是写不动,,,, 所以就先把我在luogu上的题解搬过来吧! 题目大意:查询区间众数,无修改,强制在线 乍一看是一道恐怖的题,仔细一看发现并没有那么难: 大致思路是这样的,首先我们要充分发挥分块暴力大法好的精神 先暴力预处理出每个块内每种蒲公英的个数, 然后求出对每个块而言的前缀和, 于是这样我们就可以区间查询任意两个块之间每种蒲公英的数量了 然后我们预处理出任意两个块之间的众数 最后对于每组询问,我们先找到夹在它们中间的块, 如果这个两个块r-l<=1,那么我们暴力求众数 为什…
luogu 普通版题解:https://www.cnblogs.com/lcxer/p/10876856.html 在普通版里,我们考虑对于\(n\)对情侣,恰好\(k\)对是和谐的方案数是 \[ ans[n][k]=\binom{n}{k}A^k_n2^kg(n-k) \] 然而这样做是\(O(n^2)\)的,瓶颈在于如何快速求出\(g(n-k)\) 之前我们的做法需要用到\(ans\)数组,这样是无法优化的,我们换一个思路来求\(g\) 假如我们已经确定了\(n-1\)对情侣都是乱序的方案数…
Preface 一边打一边写作文打的像shit,T2失智严重特判错了233 Orz Div1 Rank2的foreverlastnig聚聚,顺便说一句显然Luogu的比赛质量比以往显著提高了啊 以下题目按难度顺序排序 P5587 打字练习 送分模拟题,注意行首退格的问题以及一个坑点:范文中也有退格 #include<cstdio> #include<iostream> #include<string> #define RI register int #define CI…
题意:有\(r\)X\(r\)的网格图,有\(n\)位名人,会在\(t_i\)时出现在\((x_i,y_i)\),如果过了\(t_i\)名人就会消失,从某一点走到另外一点需要花费的时间是它们之间的曼哈顿距离的值,你刚开始在\((1,1)\)点,问你最多能给多少名人拍照. 题解:因为某个点是从另外一个点走过来的,所以我们不难想到使用dp来解决此题,直接写线性dp的话时间复杂度是\(O(n^2)\),但是我们会发现,因为题目给的名人的出现时间\(t_i\)是递增的,而两个点的最大的曼哈顿距离是\(2…