Luogu P6815 [PA2009]Cakes
题意
给定一个 \(n\) 个点 \(m\) 条边的图,点 \(i\) 有权值 \(a_i\),一个三元环 \((i,j,k)\) 的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的贡献之和。
\(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 3\times 10^5\)
题解
所谓的三元环计数其实就是个优雅的暴力。
考虑将原图的边定向:度数大的连向度数小的,度数一样则编号大的连向编号小的。我们可以发现这个图有一些特殊性质:
由于严格规定了连边的方向,所以这个图是个 DAG。
如果一个点在原图中度数大于 \(\sqrt{m}\),注意到这个点只能向原图不小于它的点连边,而且原图中每个点的度数之和是 \(O(m)\),所以这个点在新图上的出度为 \(O(\sqrt{m})\)。
如果一个点在原图中度数不大于 \(\sqrt{m}\),由于新图中的出度不可能比原图还大,所以这个点在新图上的出度为 \(O(\sqrt{m})\)。
所以建完图之后暴力枚举即可,因为出度为 \(O(\sqrt{m})\) 所以我们可以通过打标记的方法快速查询一个点能不能直接到达另一个点,时间复杂度 \(O(m\sqrt{m})\)。
注意一下数三元环的时候用邻接表存新图由于内存访问不连续所以没 vector 存图跑得快,在这题的直接后果就是被卡常。
代码
#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
const ll MAXN=3e5+51;
ll n,m;
li res;
vector<ll>g[MAXN];
ll vis[MAXN],deg[MAXN],from[MAXN],to[MAXN],w[MAXN];
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
int main()
{
n=read(),m=read();
for(register int i=1;i<=n;i++)
{
w[i]=read();
}
for(register int i=1;i<=m;i++)
{
deg[from[i]=read()]++,deg[to[i]=read()]++;
}
for(register int i=1;i<=m;i++)
{
if(deg[from[i]]>deg[to[i]]||(deg[from[i]]==deg[to[i]]&&from[i]>to[i]))
{
swap(from[i],to[i]);
}
g[from[i]].emplace_back(to[i]);
}
for(register int i=1;i<=m;i++)
{
for(register int j:g[i])
{
vis[j]=1;
}
for(register int j:g[i])
{
for(register int k:g[j])
{
res+=vis[k]*max(w[i],max(w[j],w[k]));
}
}
for(register int j:g[i])
{
vis[j]=0;
}
}
printf("%lld\n",res);
}
Luogu P6815 [PA2009]Cakes的更多相关文章
- BZOJ3498 : PA2009 Cakes
令三元环(i,j,k)中i>j>k,则每条边只需要从大点连向小点 设d[x]表示从x连出的边的条数 从1到n枚举点i,然后枚举所有与i相连的边(i,x)(x<i) 如果$d[x]\l ...
- BZOJ 3498 PA2009 Cakes(三元环处理)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k ...
- BZOJ 3498: PA2009 Cakes 一类经典的三元环计数问题
首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vect ...
- BZOJ 3498 PA2009 Cakes
本题BZOJ权限题,但在bzojch上可以看题面. 题意: N个点m条无向边,每个点有一个点权a. 对于任意一个三元环(i,j,k)(i<j<k),它的贡献为max(ai,aj,ak) 求 ...
- BZOJ.3498.[PA2009]Cakes(三元环 枚举)
题目链接 感觉我可能学的假的(复杂度没问题,但是常数巨大). 一个比较真的说明见这儿:https://czyhe.me/blog/algorithm/3-mem-ring/3-mem-ring/. \ ...
- BZOJ3498: PA2009 Cakes(三元环)
题意 题目链接 Sol 按照套路把边转成无向图,我们采取的策略是从权值大的向权值小的连边 然后从按权值从小到大枚举每个点,再枚举他们连出去的点\(v\) 如果\(v\)的度数\(\leqslant M ...
- bzoj 3498: PA2009 Cakes【瞎搞】
参考:https://www.cnblogs.com/spfa/p/7495438.html 为什么邻接表会TTTTTTTLE啊...只能用vector? 把点按照点权从大到小排序,把无向边变成排名靠 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
随机推荐
- Linux系统编程—条件变量
条件变量是用来等待线程而不是上锁的,条件变量通常和互斥锁一起使用.条件变量之所以要和互斥锁一起使用,主要是因为互斥锁的一个明显的特点就是它只有两种状态:锁定和非锁定,而条件变量可以通过允许线程阻塞和等 ...
- Vue 属性渲染
属性渲染 关于标签的属性渲染统一使用v-bind属性指令,比如轮播图的src全部经过后端获得,所以我们需要对src属性做动态渲染. 基本使用 使用v-bind属性指令,动态绑定图片的地址. <b ...
- android.widget.TextView.setText() on a null object reference
错误描述 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView. ...
- 《C++ primerplus》第13章练习题
1.对CD类的派生练习.基类CD类存储作者和作品号等信息,派生类Classic额外增加一格"主要作品"的信息.主函数使用拷贝构造函数.按引用传递参数的函数和指针来测试基类和派生类的 ...
- P2783 有机化学之神偶尔也会作弊 题解
题面 前言 这道题以前还是道(水)黑题,现在怎么降紫了???? 前置芝士 tarjain 缩点 倍增求LCA或树剖求LCA 脑子... 题意 给你一个无向图,要求你把所有的环缩成一个点.在新得到的图上 ...
- BSGS算法解析
前置芝士: 1.快速幂(用于求一个数的幂次方) 2.STL里的map(快速查找) 详解 BSGS 算法适用于解决高次同余方程 \(a^x\equiv b (mod p)\) 由费马小定理可得 x &l ...
- Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件
目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...
- swoft 使用协程 初试
控制器访问 /hi /** * @Swoft\Bean\Annotation\Mapping\Inject("UserService") * @var UserService */ ...
- linux(centos8):用sort对文本内容排序
一,sort的用途 1,作用: sort命令用于将文本文件内容加以排序. 它能够以行为单位来排序 2,sort常与uniq搭配使用,原因: 用uniq命令去重时, 需要相同的每行位置相邻才能生效, 所 ...
- jquery $.ajax 获取josn数据
<script type="text/javascript" src="jquery-1.9.1.js"></script> <s ...