CF1404E Bricks (最大权独立集)】的更多相关文章

考虑把答案进行转化,通过分矩形条,我们能去掉一些夹在#之间的边 那么答案= #个数 - 能去掉的边个数 但去掉是有限制的,同一个#格子的横边和竖边不能同时去掉 把边转化成点,限制变成边. 横竖边的点 和 限制 构成了一个二分图. 问题转化成求这个二分图的最大权独立集!! 上dinic就行了 1 #include <set> 2 #include <vector> 3 #include <cstdio> 4 #include <cstring> 5 #incl…
Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大.   Input 包括多个测试实例,每个测试实例包括2整数m,n和m*n个非负数(m<=50,n<=50)   Output 对于每个测试实例,输出可能取得的最大的和 题目大意:这么短还中文就没大意了,唯一要注意的就是输入的第一个是行第二个是列…… 思路:这题为最大权独立集(所选的点之间都没有边).建立…
/*最大点权独立集=sum-最小点权覆盖*/ #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define inf 0x3fffffff #define ll __int64 #define N 3000 struct node { ll u,v,w,next; }bian[N*N*2]; ll ma[N][N],id[N][N],head[N],yong,s,t,di…
题目描述 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 输入 第一行一个正整数n,表示数的个数.n<=3000 第二行n个正整数a1,a2,...an 输出 最大的和 样例输入 5 3 4 5 6 7 样例输出 22   可以发现如果两个数都是偶数,那么$gcd>=2$,一定可以同时选:如果两个数都是奇数,那么两个数的平方和是$4$的倍数加$2$,而一个奇数的平方是$4…
http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意:中文. 思路:一个棋盘,要使得相邻的点不能同时选,问最大和是多少,这个问题就是最大点权独立集. 可以转化为所有的点权 - 最小点权覆盖集(最小割) = 最大点权独立集. 转载两个的定义:这里. 覆盖集(vertex covering set,VCS)是无向图的一个点集,使得该图中所有边都至少有一个端点在该集合内.形式化的定义是点覆盖集为G'VV∈(,)uvE∀∈,满足对于,都有 或成立,即,'uV…
首先将朋友通过并查集缩起来,因为$P\geq\frac{n(n-1)}{3}$,所以最后最多剩下$46$个点. 将自相矛盾的点删掉,就变成求最大权独立集问题,这等于求补图的最大团. 然后直接用Bron-Kerbosch算法枚举所有极大团,枚举的时候更新答案即可. 时间复杂度$O(3^\frac{n}{3})$. #include<cstdio> #define N 46 typedef unsigned long long ll; int n,m,q,i,j,x,y,ans,sum,flag,…
模型要点: 1.一般适用于二取一问题或者01规划. 2.利用最小割=最大流,转化为最大流求之. 建议阅读胡伯涛的论文 <<最小割模型在信息学竞赛的应用>>,有精彩有序的证明和各种模型,不过我大概花了2个星期才把它弄懂...最小密度路径的改进算法那一块的推导前面部分有些问题,但后面是对的,结论也是对的,蛋疼了好久.. 相关题目: 1.太空飞行计划(网络流24题) 题目大意: 有一些实验和仪器,做每个实验有相应的报酬,但是需要买好相应的仪器(多个实验可以共用),仪器需要相应的钱.求最大…
题目大概是,一个数轴上n个线段,每个线段都有起始坐标.长度和权值,问从中取出没有公共交点的线段的最大权和. 取k次是个经典的最小费用最大流问题,不过这题建容量网络有20W个点,离散化最多也要6W个点,跑不动最小费用最大流的样子.. 其实这题也是个经典的DP,区间图最大权独立集问题,<挑战程序设计竞赛>有介绍. dp[i]表示坐标在[0,i]范围内能得到的最大的线段权值和 dp[i]=max(dp[i-1],max(dp[j]+w)([j,i]是一条权w的线段)) 用左闭右开的区间表示这道题的线…
[题意] 给定n个数,要求选出一些数满足 1.存在c,a*a+b*b=c*c 2.gcd(a,b)=1  使得和最大. [思路] 二分图的最大权独立集(可以这么叫么QAQ 先拆点,对于不满足条件的两个点,连边(u,v’,inf),(v,u’,inf),另外连边(S,u,a[u]),(u,T,a[u]). 求出的最小割为最小亏损的2倍. [代码] #include<set> #include<cmath> #include<queue> #include<vecto…
容易想到是最小割(最大权独立集)然后每个数拆成两个点,不能同时选的之间连边跑最小割,最后答案=总数-mincut/2 因为这样建图将流量变成了原来的两倍 当然这道题更好的建图方法是分成奇数和偶数两个集合不难发现,奇数和奇数,偶数和偶数之间显然不能同时满足条件的所以这样直接ans=总点数-mincut ; type node=record point,flow,next:longint; end; ..] of node; a,p,cur,pre,d,numh,h:..] of longint;…
Saber大法吼 2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 这是在阿尔托利亚·潘德拉贡成为英灵前的事情,她正要去拔出石中剑成为亚瑟王,在这之前她要去收集一些宝石. 宝石排列在一个n*m的网格中,每个网格中有一块价值为v(i,j)的宝石,阿尔托利亚·潘德拉贡可以选择自己的起点. 开始时刻为0秒.以下操作,每秒按顺序执行 1.在第i秒开始的时候,阿尔托利亚·…
传送门 题意:环套树的最大权独立集 一开始想处理出外向树树形$DP$然后找到环再做个环形$DP$ 然后看了看别人的题解其实只要断开环做两遍树形$DP$就行了...有道理! 注意不连通 然后洛谷时限再次不科学,卡常失败$SAD$ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long…
1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5403  Solved: 2060[Submit][Status][Discuss] Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队.于是人们把…
题目链接 Luogu P4643 题解 猫锟在WC2018讲的黑科技--动态DP,就是一个画风正常的DP问题再加上一个动态修改操作,就像这道题一样.(这道题也是PPT中的例题) 动态DP的一个套路是把DP转移方程写成矩阵乘法,然后用线段树(树上的话就是树剖)维护矩阵,这样就可以做到修改了. 注意这个"矩阵乘法"不一定是我们常见的那种乘法和加法组成的矩阵乘法.设\(A * B = C\),常见的那种矩阵乘法是这样的: \[C_{i, j} = \sum_{k = 1}^{n} A_{i,…
我们经常会遇到一些问题,是一些dp的模型,但是加上了什么待修改强制在线之类的,十分毒瘤,如果能有一个模式化的东西解决这类问题就会非常好. 给定一棵n个点的树,点带点权. 有m次操作,每次操作给定x,y,表示修改点x的权值为y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 如果不带修改,那就是一个最简单是树形dp问题. 我们设一个dp[i][0],dp[i][1]表示以i为根的子树 动态dp能够使用的一个前提就是它的转移是线性的,这样我们就可以用矩阵乘法实现快速转移了. 注意:这里的…
不得不承认,去年提高组 D2T3 对动态 DP 起到了良好的普及效果. 动态 DP 主要用于解决一类问题.这类问题一般原本都是较为简单的树上 DP 问题,但是被套上了丧心病狂的修改点权的操作.举个例子,我们来看一道例题. [模板]动态 DP 给定一棵 \(n\) 个点的树.\(i\) 号点的点权为 \(a_i\).有 \(m\) 次操作,每次操作给定 \(u, w\),表示修改点 \(u\) 的权值为 \(w\).你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 我们首先考虑没有修改的情…
动态dp初探 动态区间最大子段和问题 给出长度为\(n\)的序列和\(m\)次操作,每次修改一个元素的值或查询区间的最大字段和(SP1714 GSS3). 设\(f[i]\)为以下标\(i\)结尾的最大子段和,\(g[i]\)表示从起始位置到\(i\)以内的最大子段和. \[ f[i]=\max(f[i-1]+a[i],a[i])\\g[i]=\max(g[i-1],f[i]) \] 定义如下的矩阵乘法,显然这满足乘法结合律和分配律. \[ C=AB\\C[i,j]=\max_{k}(A[i,k…
学习了一下动态DP 问题的来源: 给定一棵 \(n\) 个节点的树,点有点权,有 \(m\) 次修改单点点权的操作,回答每次操作之后的最大带权独立集大小. 首先一个显然的 \(O(nm)\) 的做法就是每次做一遍树形DP(这也是我在noip考场上唯一拿到的部分分),直接考虑如何优化这个东西. 简化一下问题,假如这棵树是一条链,那就变得很简单了,可以直接拿线段树维护矩阵加速. 可是如果每个点不止有一个儿子呢? 我们首先树剖一下. 设 \(g[i][0]=\sum\limits_{j\in ligh…
题面 给定一棵 \(n\) 个点的树,点带点权. 有 \(m\) 次操作,每次操作给定 \(x,y\) ,表示修改点 \(x\) 的权值为 \(y\) . 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 题解 如题所示 , 是个模板题 ... 首先考虑静态 \(dp\) , 令 \(dp_{u,0/1}\) 为 \(u\) 不存在 / 存在 于最大权独立集的权值大小 . 然后转移很显然 , 一个点存在于独立集中时 , 儿子全都不能选 . 不存在时 , 儿子可选可不选 . 令 \(v\)…
用途 对于某些树形dp(目前只会树上最大权独立集或者类似的),动态地修改点权,并询问修改后的dp值 做法(树剖版) 以最大权独立集为例 设$f[x][0/1]$表示x选不选,这棵子树的最大权独立集大小 那么有(设y是x的孩子) $$f[x][0]=\sum{max\{f[y][0],f[y][1]\}} , f[x][1]=val[x]+\sum{f[y][0]}$$ 那么在只关心其中的一个孩子y'的情况下,我们可以得到方程 $$f[x][0]=S_0+max\{f[y'][0],f[y'][1…
Description: 给定一棵n个点的树,点带点权. 有m次操作,每次操作给定x,y,表示修改点x的权值为y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. Hint: \(n,m<=10^5\) Solution: 详见代码 #include<bits/stdc++.h> #define ls p<<1 #define rs p<<1|1 using namespace std; typedef long long ll; const int m…
#6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 给定实直线 L LL 上 n nn 个开区间组成的集合 I II,和一个正整数 k kk,试设计一个算法,从开区间集合 I II 中选取出开区间集合 S⊆I S \subseteq IS⊆I,使得在实直线 L LL 的任何一点 x xx,S SS 中包含点 x xx 的开区间个数不超过 …
我的倍增解法吊打动态 \(dp\) 全局平衡二叉树没学过 先讲 \(NOIP\) 范围内的倍增解法. 我们先考虑只有一个点取/不取怎么做. \(f[x][0/1]\) 表示取/不取 \(x\) 后,\(x\) 子树内的最小权覆盖集,\(g[x][0/1]\) 表示取/不取 \(x\) 后,除 \(x\) 子树的最小权覆盖集.那么这两个数组可以 \(O(n)\) 预处理出来. \[f[x][0]+=f[y][1]\] \[f[x][1]+=min(f[y][0],f[y][1])\] \[g[y]…
从联赛活了下来(虽然分数倒一……),接下来要去CDQZ集训啦…… DAY -2 2017-12-16 被老师安排负责一部分同学的住宿以及安排…… 抓紧时间继续学习,LCT真好玩啊真好玩…… 晚上放假了…… DAY -1 2017-12-17 放假进行中……下午转场到了石家庄. 与srs,wzz,wxh几个dalao住在一个宾馆,晚上出去吃饭…… DAY 0 2017-12-18 4:30早起……到机场. 似乎没有想象中的麻烦…… 很顺利的登机,起飞的时候气压的确有一些奇怪的问题……耳朵有点难受…
题目描述 在一个有 \(m \times n\) 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意 \(2\) 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. 输入格式 文件第 \(1\) 行有 \(2\) 个正整数 \(m\) 和 \(n\) ,分别表示棋盘的行数和列数.接下来的 \(m\) 行,每行有 \(n\) 个正整数,表示棋盘方格中的数. 注意:\(m\) 是行数,\(n\) 是列数. 输出格式 输出取数的最大总和. 样例 样例输入 3…
http://acm.hdu.edu.cn/showproblem.php?pid=1565 先进行二分图黑白染色,S到黑,白到T,黑到白,问题转化成了求最大权独立集,最大点权独立集=sum-最小点权覆盖集,最小点权覆盖集等于上图最小割 具体解释: 二分图最小点覆盖和最大独立集都可以转化为最大匹配求解.在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集. 二分图最小点权覆盖 从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值…
持续更新!! DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点. DP的类型 序列DP [例题]BZOJ2298 problem a 数位DP 常用来统计或者查找一个区间满足条件的数,然后按数位顺序DO,一般需要仔细分情况讨论,常见处理如把区间拆为\([1,l),[1,r]\),记忆化,预处理等. [例题]BZOJ3131 淘金 概率DP 概率DP是对一类求时间概率或者期望概率DP的总称. 对于求概率问题,有时利用补集转化,有时将其转化为计数问题.求期望大多利用期望的线性性来…
题目大意:给你一颗$n$个点的树,点有点权,有$m$次操作,每次操作给定$x$,$y$,表示修改点$x$的权值为$y$. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 数据范围:$n,m≤1e5$ 我们显然可以得出一个$O(nm)$的暴力做法,每次修改完后$dp$一次,然而这个显然会超时. 考虑当树退化成链时的简单做法. 我们用线段树维护每个区间的答案.对于区间$[l,r]$,我们维护一个$2×2$的答案矩阵$ans$. 设$ans[0][0]$表示区间左端点可能被选择,右端点一定不…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目大意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队.于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶.骑士团是肯定具有打败邪恶势力的能…
Description 给定一个 \(n~\times~m\) 的矩阵,每个位置有一个正整数,选择一些互不相邻的数,最大化权值和 Limitation \(1~\leq~n,~m~\leq~100\) Solution 由于数必须互不相邻,考虑二分图. 将矩阵染成二分图,相邻的格子连边,这样一条边的两个端点不能被同时选择,问题就被转化为了二分图上的最大带权独立集问题. 有关二分图的几个定理: 二分图最小无权点覆盖 = 二分图最大匹配 二分图最小无权边覆盖 = 总点数 - 二分图最大匹配 二分图最…