据说原数据可以让复杂度不满的暴力O(Tn^2)过掉……O(Tn^2)方法类似于codeforces一场div2的E题

有一种比较好的方法:每次找出原图G中度最小的点加入q,然后将相邻的点加入新图G'。这显然能够得到一个最大的独立集。而p可以在维护度最小的点最大这一过程中,把G的所有点加入集合p。因为set带一个log,所以复杂度为O(Tmlogn)。

证明:满足(p+1)(q+1)>n即可。删除的q节点中d的度数和满足Σ(d[i]+1)=n,其中i∈q,然后max{d[i]}q>=n,于是(max{d[i]}+1)q>n,而p>=max{d[i]},所以命题成立。

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+;
int n,m,n1,n2,len,deg[N],vis[N],s1[N],s2[N],b[N];
vector<int>G[N];
struct node{int u,d;}a[N];
bool operator<(node a,node b){return a.d==b.d?a.u<b.u:a.d<b.d;}
typedef set<node>::iterator iter;
set<node>S;
inline int read()
{
int x=,w=;
char ch=;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while(isdigit(ch))x=(x<<)+(x<<)+(ch^),ch=getchar();
return w?-x:x;
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
n=read(),m=read();
n1=n2=len=;
for(int i=;i<=n;i++)G[i].clear(),deg[i]=vis[i]=,a[i]=(node){i,};
for(int i=;i<=m;i++)
{
int x=read(),y=read();
G[x].push_back(y),G[y].push_back(x);
deg[x]++,deg[y]++,a[x].d++,a[y].d++;
}
for(int i=;i<=n;i++)S.insert(a[i]);
int mxd=-,mx=;
while(!S.empty())
{
int u=(*S.begin()).u;
if(deg[u]>mxd)mxd=deg[u],mx=len;
S.erase(S.begin());
b[++len]=u,s2[++n2]=u,vis[u]=;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
iter it=S.find((node){v,deg[v]});
if(it==S.end())continue;
S.erase(it),b[++len]=v;
for(int j=;j<G[v].size();j++)
{
int t=G[v][j];
it=S.find((node){t,deg[t]});
if(it==S.end())continue;
S.erase(it),S.insert((node){t,--deg[t]});
}
}
}
for(int i=mx+;i<=len;i++)s1[++n1]=b[i];
printf("%d",n1);for(int i=;i<=n1;i++)printf(" %d",s1[i]);
printf("\n%d",n2);for(int i=;i<=n2;i++)printf(" %d",s2[i]);
puts("");
}
}

[SDOI2019]热闹又尴尬的聚会(图论+set+构造)的更多相关文章

  1. [SDOI2019]热闹又尴尬的聚会 构造,贪心

    [SDOI2019]热闹又尴尬的聚会 链接 luogu loj 思路 第一问贪心?的从小到大删除入度最小的点,入度是动态的,打个标记. 当然不是最大独立集. 第二问第一问的顺序选独立集,不行就不要.选 ...

  2. SDOI2019热闹又尴尬的聚会

    P5361 [SDOI2019]热闹又尴尬的聚会 出题人用脚造数据系列 只要将\(p\)最大的只求出来,\(q\)直接随便rand就能过 真的是 我们说说怎么求最大的\(p\),这个玩意具有很明显的单 ...

  3. 【题解】Luogu P5361 [SDOI2019]热闹又尴尬的聚会

    原题传送门 构造题. 明显p,q都越大越好 我们考虑每次取出度最小的点,加到尴尬聚会的集合中(因为把与它相邻的点全删了,不珂能出现认识的情况),把它自己和与自己相连的点从图上删掉(边也删掉),记下这个 ...

  4. [SDOI2019] 热闹又尴尬的聚会

    热闹度\(p\)子图中最小的度数,尴尬度\(q\)独立集大小,之间的约束 \[ \begin{aligned} \lfloor n/(p+1)\rfloor\le q &\rightarrow ...

  5. [洛谷P5361][SDOI2019]热闹又尴尬的聚会:构造题

    分析 构造方法 (截图自UOJ群) 可以使用std::set维护这个过程,不过据说可以做到\(O(n+m)\).. 正确性证明 题目中的要求等价于\((p+1)(q+1) > n\) 设每次找出 ...

  6. vijos2054 SDOI2019 热闹的聚会与尴尬的聚会

    题目链接 思路 首先观察题目最后的式子\(\lfloor \frac{n}{p + 1} \rfloor \le q\) 并且\(\lfloor \frac{n}{q+1} \rfloor \le p ...

  7. [luogu5361]热闹的聚会与尴尬的聚会

    由于两者是独立的,我们希望两者的$p$和$q$都最大 考虑最大的$p$,先全部邀请,此时要增大$p$显然必须要删去当前度数最小的点,不断删除之后将每一次度数最小值对答案取max即可 对于$q$也即最大 ...

  8. Luogu3524 POI2011 Party 图论、构造

    题目传送门:https://www.luogu.org/problemnew/show/P3524 大意:给一个$N$个点的图,其中一定有一个大小为$\frac{2}{3}N$的团,程序需给出一个大小 ...

  9. Gym - 101503I 利用到图论的构造

    比赛的时候没有注意到 给出的up矩阵 能使我们随便选一列 确定这一列的rank 这样我们得出每一行列的rank 进行构图 大->小 然后从大到小放 当前放的点 和他有因果关系并且比他大的点必须已 ...

随机推荐

  1. 一、SAP中添加一个模块到收藏夹后,显示事务代码

    一.在SAP中,如果添加一个模块到收藏夹,默认是看不到事务代码的,如图: 二.我们在附件->设置中勾选显示技术名称 三.保存之后,就会显示出事务代码,如图所示: 不忘初心,如果您认为这篇文章有价 ...

  2. 18 12 07 MySQL 与python 的交互

    ---恢复内容开始--- python 中 关于SQL语句的查询 from pymysql import * # 由于只能用了一个MySQL 的包所以全部引进 def main(): # 创建Conn ...

  3. CTF -bugku-misc(持续更新直到全部刷完)

    1.签到题 点开可见.(这题就不浪费键盘了) CTF- 2.这是一张单纯的图片 图片保存到本地,老规矩,winhex看一看 拉到最后发现 因为做过ctf新手的密码 所以一看就知道unicode 百度站 ...

  4. ubuntu 18.04 安装 Redis-server

    Redis 安装 Redis是一款内存键值存储,以其灵活性,性能和广泛的语言支持而闻名.本教程将演示如何在Ubuntu 18.04服务器上安装和配置Redis.主要内容包括: 安装 Redis Red ...

  5. unable to execute /bin/mv: Argument list too long

    四种解决”Argument list too long”参数列表过长的办法 转自 http://hi.baidu.com/cpuramdisk/item/5aa49ce00c0757aecf2d4f2 ...

  6. VMware CentOS 设置IP地址

    VMware CentOS 设置IP地址 1. 设置虚拟机网络编辑器:参考:https://www.cnblogs.com/1285026182YUAN/p/10440443.html 2. Cent ...

  7. 十五、Numpy-科学计算基础库

    Numpy:          NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等.其提供最核心类型为多维数组类型(ndarray) ...

  8. ab工具压接口的时候post传参问题

    ab  -n 10000 -c 40 -p  [参数所在文件] -T 'application/json'  http://xxx 以上命令, 压测需要post json格式的参数的api时, 一定注 ...

  9. Okhttp 多次调用同一个方法出现错误java.net.SocketException: Socket closed

    Okhttp 多次调用同一个方法出现错误java.net.SocketException: Socket closed https://blog.csdn.net/QQiqq1314/article/ ...

  10. 完整注册登陆php源码,附带session验证。

    1.首先先写表单页面login.html. <!DOCTYPE html> <html lang="en"> <head>     <me ...