首先将朋友通过并查集缩起来,因为$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. UINavigationController导航条是否挡住下面的内容

    控制 UINavigationController 导航条是否挡住下面的内容 if ([[[UIDevice currentDevice] systemVersion] floatValue] > ...

  2. "稀奇古怪的"delete this

    myClass::foo(){     delete this; } .. void func(){     myClass *a = new myClass();     a->foo(); ...

  3. jquery学习笔记---闭包,原型链,this关键字

    网上的资料很多,关于闭包,原型链,面向对象之内的.本人也有一点自己的总结. 关于this: this 的值取决于 function 被调用的方式,一共有四种, 如果一个 function 是一个对象的 ...

  4. 微信支付 - V3退款

        退款问题: 1.证书加载不进去,出现"内部错误" 解决:在iis中找到对应的应用连接池,右键高级设置,找到"加载用户配置文件"改为true.   2.需 ...

  5. Jquery.Datatables 基本设置的中文注解

    $(document).ready(function() { $('#example').dataTable({ "sScrollX": "100%", //表 ...

  6. 对Object类中方法的深入理解

    看一下API中关于Object的介绍: 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 那么Object中到底有哪些方法,各自有什 ...

  7. ASP.NET Web Api 使用CacheCow和ETag缓存资源(转载)

    转载地址:http://www.cnblogs.com/fzrain/p/3618887.html 前言 本文将使用一个开源框架CacheCow来实现针对Http请求资源缓存,本文主要介绍服务器端的缓 ...

  8. Windows 10 周年更新正式版下载 + win10 快捷键

    Windows 10 周年更新正式版  360云资源总汇(施工中): https://yunpan.cn/c6Svi7Az52XBs (提取码:e5dd)今后提到周年更新版.1607版或RS1版,都是 ...

  9. 在ubuntu上搭建开发环境2---Win7、Ubuntu双系统正确删除Ubuntu

    这种删除ubuntu的方式就是针对本博客中搭建双系统的方式:http://www.cnblogs.com/xumenger/p/4459963.html 如果ubuntu不是以wubi方式安装的,那么 ...

  10. Delphi的字符串、PChar和字符数组之间的转换

    参考:http://my.oschina.net/kavensu/blog/193719 以下的各种方法都是我在Delphi 6的环境下测试成功的,可能根据你的开发环境.不同的上下文语境……有一些可能 ...