首先将朋友通过并查集缩起来,因为$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. android app 内部文件路径

    public class MainActivity extends Activity { final String FILE_NAME = "crazyit.bin"; @Over ...

  2. Linux下第一次使用MySQL数据库,设置密码

    在终端下输入:/etc/rc.d/init.d/mysqld status 查看MySQL状态,看看是否运行. 没有运行的话就输入:/etc/rc.d/init.d/mysqld start 这时,就 ...

  3. JavaScript基础——定义变量

    在JavaScript中使用变量来临时存储和访问来自JavaScript文件的数据.变量既可以指向简单的数据类型,如数字或者字符串:也可以指向更复杂的数据类型,比如对象. 在JavaScript中定义 ...

  4. python中获取当前日期在当月是第几天

  5. Asp.Net - 9.socket(聊天室)

    9.1 Socket相关概念 IP地址 每台联网的电脑都有一个唯一的IP地址. 长度32位,分为四段,每段8位,用十进制数字表示,每段范围 0 ~ 255 特殊IP:127.0.0.1 用户本地网卡测 ...

  6. 【转载】python super的用法

    转载地址: http://blog.csdn.net/cxm19830125/article/details/20610533 super的用法是调用继承类的初始化方法,如下面的代码: class A ...

  7. ubuntu中jdk已经安装,但是eclipse启动报错

    问题描述 在ubuntu中,jdk已经正常安装,java_home变量已经配置,但是启动eclipse的时候还是弹出以下错误信息: A Java RunTime Environment (JRE) o ...

  8. button hot key 热键

    <Button x:Name="ScanIDButton" Margin="11,0,0,0" IsEnabled="{Binding Elem ...

  9. javascript的笔记精简版

    在写javascript的代码时一定要用单引号或者双引号括起来,不带引号的话就以字符串来处理 在javascript里面不能以纯数字或者click命名函数或者变量 要想修改标签的属性,在html里面怎 ...

  10. windows内核需要注意的

    修改windows内核函数 先屏蔽KdPrint 测试. Hook函数一律使用全局变量 妹的..KiTrap0E 修改.触发了已经断点.但是硬件断点Hook函数里只要使用KdPrint 就蓝屏