HELLO W|

kingwzun

园龄:3年6个月粉丝:111关注:0

2022-09-07 12:00阅读: 80评论: 0推荐: 0

四元环计数

给每个点按照度数大小编不同的号。

枚举点u,枚举和点u相邻的点v,枚举v的相邻且度数比uv大的点z,ans+=cnt[z],++cnt[z];

复杂度: 枚举uv的复杂度是 O(n+m) 的,然后点z的数量不超过 O(m) 个。

原因: 设与x相邻的度数大于x的点y有s个,则x的度数至少为s,所以总边数s2=2m

代码

signed main()
{
in(n,m);
for(ri i=1,a,b; i<=m; ++i)
{
in(a,b);
E[a].pb(b),E[b].pb(a);
}
for(ri i=1; i<=n; ++i) du[id[i]=i]=Size(E[i]);
sort(id+1,id+1+n,cmp);
for(ri i=1; i<=n; ++i) rk[id[i]]=i;
for(ri u=1; u<=n; ++u)
for(solid v:E[u])
if(rk[v]>rk[u]) G[u].pb(v);
LL ans=0;
for(ri u=1; u<=n; ++u)
{
for(solid v:E[u])
for(solid w:G[v])
if(rk[w]>rk[u]) ans+=cnt[w]++;
for(solid v:E[u])
for(solid w:G[v])
if(rk[w]>rk[u]) cnt[w]=0;
}
out(ans);
return 0;
}

原文:https://www.luogu.com.cn/blog/i207M/san-yuan-huan-ji-shuo-xue-xi-bi-ji

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/16664938.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(80)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起