Luogu P6815 [PA2009] Cakes 题解
三元环计数题。
无向图三元环计数分为三步:
\(1\) :给所有无向边重定向。记录每个点的度数,度数大的点指向度数小的点。如果度数相同,编号小的点指向编号大的点。最后这个图是有向无环图。
\(2\) :打标记。对于图中每一个点 \(u\),将其相邻的点标记可以被 \(u\) 到达。
\(3\) :统计答案。对于图中每一个点 \(u\),遍历其可以相邻的点 \(v\),如果 \(v\) 相邻的点 \(w\) 被标记可以被 \(u\) 到达,那么 \((u,v,w)\) 构成一个三元环。三元环不会被重复计算。
在这一题中,我们只需要对无向图三元环计数算法的第三步略微改动,当我们发现 \((u,v,w)\) 构成一个三元环时,将答案增加 \(\max(a_u,a_v,a_w)\) 即可。
由于无向图三元环计数算法复杂度为 \(O(m\sqrt{m})\),所以这个算法的时间复杂度为 \(O(m\sqrt{m})\)。
本题卡邻接表的常数,注意常数影响。
#include <bits/stdc++.h>
using namespace std;
struct edge
{
int v,nxt;
}e[600000];
int n,m,a[200000],h[200000],b[200000],ind[200000],u[400000],v[400000],cnt=0;
long long ans=0;
void add_edge(int u,int v)
{
e[++cnt].nxt=h[u];
e[cnt].v=v;
h[u]=cnt;
}
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=m;i++)u[i]=read(),v[i]=read(),ind[u[i]]++,ind[v[i]]++;
for(int i=1;i<=m;i++)
if((ind[u[i]]>ind[v[i]])||(ind[u[i]]==ind[v[i]]&&u[i]<v[i]))add_edge(u[i],v[i]);
else add_edge(v[i],u[i]);
for(int i=1;i<=n;i++)
{
for(int j=h[i];j;j=e[j].nxt)b[e[j].v]=i;
for(int j=h[i];j;j=e[j].nxt)
{
int ad=max(a[i],a[e[j].v]);
for(int k=h[e[j].v];k;k=e[k].nxt)
if(b[e[k].v]==i)ans+=max(ad,a[e[k].v]);
}
}
printf("%lld",ans);
return 0;
}
Luogu P6815 [PA2009] Cakes 题解的更多相关文章
- Luogu P6815 [PA2009]Cakes
题意 给定一个 \(n\) 个点 \(m\) 条边的图,点 \(i\) 有权值 \(a_i\),一个三元环 \((i,j,k)\) 的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的 ...
- 【luogu P5022 旅行】 题解
题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...
- BZOJ 3498 PA2009 Cakes(三元环处理)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k ...
- 【luogu P2831 愤怒的小鸟】 题解
题目链接:https://www.luogu.org/problemnew/show/P2831 写点做题总结:dp,搜索,重在设计状态,状态设的好,转移起来也方便. 对于一条抛物线,三点确定.(0, ...
- 【luogu P2827 蚯蚓】 题解
题目链接:https://www.luogu.org/problemnew/show/P2827 35分:暴力sortO(mnlogn). 80分:考虑到每次不好维护不被切的点+q,正难则反.改成维护 ...
- 【luogu P3959 宝藏】 题解
题目链接:https://www.luogu.org/problemnew/show/P3959 我只是心血来潮想学SA(考场上骗分总行吧). 这个题可以状压DP.爆搜+剪枝.有意思的还是随机化搜索( ...
- 【luogu P3410 拍照】 题解
题目链接:https://www.luogu.org/problemnew/show/P3410 这个题就是求一个最大权闭合图 在一个图中,一些点构成一个集合,且集合中的出边指向的终点也在这个集合中, ...
- 【luogu P1113 杂务】 题解
题目链接:https://www.luogu.org/problemnew/show/P1113 菜 #include <queue> #include <cstdio> #i ...
- 【luogu P4114 Qtree1】 题解
题目链接:https://www.luogu.org/problemnew/show/P4114 1.把边权转化到点权:选取连接这条边的两个点中较深的一个. 2.查询点到点之间的边权时,要从seg[x ...
- 【luogu P3979 遥远的国度】 题解
题目链接:https://www.luogu.org/problemnew/show/P3979 除了换根操作都是裸的树剖 所以换根时考虑: 1.我查询的根等于换的根:无影响 2.我查询的根是换的根的 ...
随机推荐
- app自动化的元素操作api
1.click() 触发当前元素的点击事件 elelogin.click(); 2.sendKeys(String str) 往触发的当前元素输入数据 eleinputpwd.sendKeys(&qu ...
- 经典常用SQL查询语句和常见问题
一.基础 1.常用sql: ------------------------ // mysql改root密码 mysqladmin -u用户名 -p旧密码 password 新密码 # ---more ...
- ragflow k8s部署详细过程
一.概述 ragflow官方提供的安装方式是docker-compose方式部署的,单机运行. k8s部署方式,暂未提供. 不过我们可以通过工具,结合docker-compose.yaml,来推演出对 ...
- 【大前端攻城狮之路】用 Typewriter-SSE 实现打字机效果
在现代 Web 开发中,实现动态文本渲染的需求日益增多.无论是聊天应用.实时通知,还是交互式界面,打字机风格的文本渲染都能显著提升用户体验.最近新写了一个开源的 NPM 包--Typewriter-S ...
- CSharp_core
C#核心篇 面向对象的概念 封装(类).继承,多态 类 基本概念 具有相同特征.相同行为.一类事物的抽象 类是对象的模板,可以通过类创建出对象 关键词class 类的申明 申明在nameplace语句 ...
- 告别 .NET 7,支持将于 5 月结束——我们几乎不认识你
微软 .NET 7 软件框架的支持将于 5 月结束,这距离其 2022 年发布仅过去 18 个月--这提醒我们,长期更新时代正在成为过去. .NET 7 于 2022 年 11 月 8 日首次亮相,与 ...
- 浅析鸿蒙(ark runtime)执行动态代码
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 5个让你眼前一亮的JavaScript装饰器技巧
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- WPF学习问题汇集:
WPF中ItemsSource改变,DataGrid中不更新 需要将ItemsSource先赋值为null,而后再赋值为新的值. 例如: gridBeamInfo.ItemsSource = null ...
- String类中的多种日期格式化方法
package javaBasic; import java.util.*; public class DateFormat { public static void main(String[] ar ...