首先将朋友通过并查集缩起来,因为$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,size[N];ll G[N];
int f[255],v[255],cnt,val[N],g[N][N];char tab[65536];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
inline int ctz(ll s){
if(!s)return 64;
if(s&65535)return tab[s&65535];
s>>=16;
if(s&65535)return tab[s&65535]+16;
return tab[s>>16]+32;
}
void BronKerbosch(ll allow,ll forbid,int s){
if(!allow&&!forbid){
if(s>ans)ans=s,sum=1;else if(s==ans)sum++;
return;
}
if(!allow)return;
int pivot=ctz(allow|forbid);
ll z=allow&~G[pivot];
for(int u=ctz(z);u<n;u+=ctz(z>>(u+1))+1){
BronKerbosch(allow&G[u],forbid&G[u],s+size[u]);
allow^=1ULL<<u;forbid|=1ULL<<u;
}
}
void BronKerbosch2(ll allow,ll forbid,int s){
if(!allow&&!forbid){
if(s>ans)ans=s,sum=1;else if(s==ans)sum++;
return;
}
if(!allow)return;
int pivot=ctz(allow|forbid);
ll z=allow&~G[pivot];s++;
for(int u=ctz(z);u<n;u+=ctz(z>>(u+1))+1){
BronKerbosch2(allow&G[u],forbid&G[u],s);
allow^=1ULL<<u;forbid|=1ULL<<u;
}
}
int main(){
for(i=0;i<65536;i++)tab[i]=__builtin_ctz(i);
read(n),read(m),read(q);
for(i=1;i<=n;i++)f[i]=i;
while(m--){
read(x),read(y);
if(F(x)!=F(y))f[f[x]]=f[y];
}
for(i=1;i<=n;i++)v[i]=-1;
for(i=1;i<=n;i++){
if(v[F(i)]<0)v[f[i]]=cnt++;
val[v[f[i]]]++;
}
while(q--){
read(x),read(y);
x=v[f[x]],y=v[f[y]];
if(x==y)val[x]=0;else g[x][y]=g[y][x]=1;
}
for(n=cnt,cnt=i=0;i<n;i++)if(val[i])v[i]=cnt,f[cnt++]=i;
if(!cnt)return puts("0 1"),0;
for(i=0;i<n;i++)if(val[i])size[v[i]]=val[i];
for(n=cnt,i=0;i<n;i++)if(size[i]>1)flag=1;
for(i=0;i<n;i++)G[i]=(1ULL<<n)-1-(1ULL<<i);
for(i=0;i<n;i++)for(j=0;j<n;j++)if(g[f[i]][f[j]])G[i]^=1ULL<<j;
flag?BronKerbosch((1ULL<<n)-1,0,0):BronKerbosch2((1ULL<<n)-1,0,0);
return printf("%d %d",ans,sum),0;
}

  

BZOJ3548 : [ONTAK2010]Party的更多相关文章

  1. 【BZOJ】【3550】【ONTAK2010】Vacation

    网络流/费用流 Orz太神犇了这题…… 我一开始想成跟Intervals那题一样了……每个数a[i]相当于覆盖了(a[i]-n,a[i]+n)这个区间……但是这样是错的!!随便就找出反例了……我居然还 ...

  2. BZOJ3550: [ONTAK2010]Vacation

    3550: [ONTAK2010]Vacation Time Limit: 10 Sec  Memory Limit: 96 MBSubmit: 91  Solved: 71[Submit][Stat ...

  3. bzoj 3545&&3551: [ONTAK2010]Peaks &&加强版 平衡树&&并查集合并树&&主席树

    3545: [ONTAK2010]Peaks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 635  Solved: 177[Submit][Stat ...

  4. BZOJ 3544: [ONTAK2010]Creative Accounting( BST )

    题意 : 一段序列 , 求一段子序列和取余 M 的最大值 其实是一道水题... 前缀和 , 然后就是找 ( sum( r ) - sum( l ) ) % M 的最大值 . 考虑一个 sum( r ) ...

  5. BZOJ 3545: [ONTAK2010]Peaks( BST + 启发式合并 + 并查集 )

    这道题很好想, 离线, 按询问的x排序从小到大, 然后用并查集维护连通性, 用平衡树维护连通块的山的权值, 合并就用启发式合并.时间复杂度的话, 排序是O(mlogm + qlogq), 启发式合并是 ...

  6. BZOJ 3551: [ONTAK2010]Peaks加强版 [Kruskal重构树 dfs序 主席树]

    3551: [ONTAK2010]Peaks加强版 题意:带权图,多组询问与一个点通过边权\(\le lim\)的边连通的点中点权k大值,强制在线 PoPoQQQ大爷题解传送门 说一下感受: 容易发现 ...

  7. BZOJ 3545: [ONTAK2010]Peaks [Splay启发式合并]

    3545: [ONTAK2010]Peaks 题意:带权图,多组询问与一个点通过边权\(\le x\)的边连通的点中点权k大值 又读错题了,输出点一直WA,问的是点权啊 本题加强版强制在线了,那这道题 ...

  8. bzoj3545: [ONTAK2010]Peaks 重构树 主席树

    题目链接 bzoj3545: [ONTAK2010]Peaks 题解 套路重构树上主席树 代码 #include<cstdio> #include<algorithm> #de ...

  9. 【BZOJ3545】 [ONTAK2010]Peaks

    BZOJ3545 [ONTAK2010]Peaks Solution 既然会加强版,直接把强制在线的操作去掉就好了. 代码实现 #include<stdio.h> #include< ...

随机推荐

  1. Google 如何修复 TrustManager 实施方式不安全的应用

    引用谷歌市场的帮助说明:https://support.google.com/faqs/answer/6346016 本文面向的是发布的应用中 X509TrustManager 接口实施方式不安全的开 ...

  2. .net学习之进程外Session的配置

    转载地址:http://www.cnblogs.com/rohelm/archive/2012/05/13/2498465.html 人人都知道怎么去使用session,但是初学者,尤其是自学的学生可 ...

  3. Delphi如何处理不同类型的文件

    参考:http://www.cnblogs.com/railgunman/articles/1800318.html 程序设计当中,我们时常遇到需要处理文件.目录及驱动器的情况,这里将对如何处理不同类 ...

  4. Shell编程基础教程3--Shell输入与输出

    3.Shell输入与输出    3.1.echo        echo命令可以显示文本行或变量,或者把字符串输出到文件        echo [option] string             ...

  5. ExcelReport第二篇:ExcelReport源码解析

    导航 目   录:基于NPOI的报表引擎——ExcelReport 上一篇:使用ExcelReport导出Excel 下一篇:扩展元素格式化器 概述 针对上一篇随笔收到的反馈,在展开对ExcelRep ...

  6. 【翻译九】java-同步方法

    Synchronized Methods The Java programming language provides two basic synchronization idioms: synchr ...

  7. HDU2296 Ring(AC自动机 DP)

    dp[i][j]表示行走i步到达j的最大值,dps[i][j]表示对应的串 状态转移方程如下: dp[i][chi[j][k]] = min(dp[i - 1][j] + sum[chi[j][k]] ...

  8. <转> jsp:include 乱码问题解决

    jsp include页面出现乱码问题的几种通用解决方法: 1.当jsp include动态文件时(jsp文件)可以在被include的jsp文件头部加上代码: <%@ page languag ...

  9. ASMCMD命令

    安装好用的rlwrap工具,在环境变量里添加如下,就能实现显示当前路径(目录),目录补全的方便功能 alias asmcmd='rlwrap -r -i asmcmd –p' asmcmd>he ...

  10. jquery获取radio和select选中值

    //jquery 获取radio选中值 <input type="radio" name="c_type" value="a" > ...