首先将朋友通过并查集缩起来,因为$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,…
容易想到是最小割(最大权独立集)然后每个数拆成两个点,不能同时选的之间连边跑最小割,最后答案=总数-mincut/2 因为这样建图将流量变成了原来的两倍 当然这道题更好的建图方法是分成奇数和偶数两个集合不难发现,奇数和奇数,偶数和偶数之间显然不能同时满足条件的所以这样直接ans=总点数-mincut ; type node=record point,flow,next:longint; end; ..] of node; a,p,cur,pre,d,numh,h:..] of longint;…
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 的开区间个数不超过 …