BZOJ 3498 PA2009 Cakes(三元环处理)】的更多相关文章

题目链接 感觉我可能学的假的(复杂度没问题,但是常数巨大). 一个比较真的说明见这儿:https://czyhe.me/blog/algorithm/3-mem-ring/3-mem-ring/. \(Description\) n个点m条边的无向图,每个点有点权.对于任意一个三元环\((i,j,k),i<j<k\),其贡献为\(max\{a_i,a_j,a_k\}\).求所有三元环的贡献和. 一般的三元环计数问题:根据出度是否\(\leq\sqrt m\)将点分为两类. 对于\(dgr[x]…
首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vector <int> g[maxn], low, high; map <int, int> mp[maxn]; int n, m, in[maxn], vis[maxn]; int main() { scanf("%d %d", &n,&m); for(…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k)其贡献为max(a[i],a[j],a[k]),请你求出贡献值之和. [题解] 我们将无向边转化成从权值大的点指向权值小的点的有向边,按权值从小到大的顺序枚举起始点,枚举相连的点,如果其出度小于sqrt(m),那么枚举与其相连的点,判断是否和起始点相连,否则,枚举起始点相连的点,判断是否和枚举点相…
本题BZOJ权限题,但在bzojch上可以看题面. 题意: N个点m条无向边,每个点有一个点权a. 对于任意一个三元环(i,j,k)(i<j<k),它的贡献为max(ai,aj,ak) 求所有三元环的贡献和. N<100000,m<250000 Solution: 本题裸的三元环计数. 无向图三元环计数的问题大致做法: 统计每个点的度数,对于一条无向边$<u,v>$,若$deg[u]==deg[v]$则从编号小的点向编号大的点连有向边,否则从$deg$较大的向较小的点连…
参考:https://www.cnblogs.com/spfa/p/7495438.html 为什么邻接表会TTTTTTTLE啊...只能用vector? 把点按照点权从大到小排序,把无向边变成排名靠前的点连向排名靠后的点的有向边并记录出度d[u],用map记录一下联通,这样可以避免重复计算 按排名遍历,设遍历到u点,扫u的邻接点v,如果v的出度小于根号m,就遍历v的所有邻接点,判断是否与u相连即可:否则,再次枚举u的邻接点v,用map判断当前v是否与新扫描的v相连: 每次判断成功都在ans里加…
题意 题目链接 Sol 按照套路把边转成无向图,我们采取的策略是从权值大的向权值小的连边 然后从按权值从小到大枚举每个点,再枚举他们连出去的点\(v\) 如果\(v\)的度数\(\leqslant M\),那么就再暴力枚举\(v\)连出去的点\(t\),看\(u\)与\(t\)是否联通(打标记) 否则暴力枚举\(u\)连出去的点\(t\),看\(v\)与\(t\)是否联通(直接hash表) 复杂度为\(O(M \sqrt{M})\) #include<bits/stdc++.h> #defin…
题目描述 N个点m条边,每个点有一个点权a.对于任意一个三元环(j,j,k)(i<j<k),它的贡献为max(ai,aj,ak) 求所有三元环的贡献和.N<100000,,m<250000. 输入 The first line of the standard input contains two integers  n and m (1<=N<=100000,1<=M<=250000) separated by a single space and deno…
题面(权限题就不放题面了) 题解 三元环模板题,按题意模拟即可. #include <cstdio> #include <cstring> #include <vector> using std::vector; const int N = 1e5 + 10, M = 2.5e5 + 10; int n, m, a[N], deg[N], u[M], v[M], vis[N], tmp; long long ans; vector<int> to[N]; i…
Description \(n\) 个点 \(m\) 条边,每个点有一个点权 \(a_i\). 对于任意一个三元环 \((i,j,k)(i<j<k)\),它的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的贡献和. Input The first line of the standard input contains two integers n and m (1<=N<=100000,1<=M<=250000) separated by a sing…
题目链接 CF 原题 \(Description\) 有n个点,其中有m条边连接两个点.每一个没有连边的三元组\((i,j,k)(i<j<k)\)对答案的贡献为\(A*i+B*j+C*k\),求所有无连边三元组的贡献和. \(Solution\) 直接求无连边三元组依旧很难.考虑用所有方案去减,那 Ans=所有方案-至少有1条连边+至少有2条连边-有3条边("至少"显然比较好做啊). 对于所有方案,A,B,C可以分别统计,即枚举哪个是A/B/C,剩下的随便组合. 对于至少1…
题面 传送门(bzoj) 传送门(CF) \(llx\)身边妹子成群,这天他需要从\(n\)个妹子中挑出\(3\)个出去浪,但是妹子之间会有冲突,表现为\(i,j\)之间连有一条边\((i,j)\),定义一种选择方案的权值为\(Ai+Bj+Ck,i<j<k\),求所有选择方案的权值之和 题解 容斥,至少\(0\)条边相连的方案\(-\)至少\(1\)条边相连的方案\(+\)至少\(2\)条边相连的方案\(-\)至少\(3\)条边相连的方案 至少\(3\)条边相连的方案最难数,是个三元环计数,和…
[BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞,变成\(\displaystyle \sum_{d|i}1\) 那么原式就可以写成:\(\displaystyle \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sum_{d=1}^Ad|ijk\). 既然\(d|ijk\),意味着\(d\)可以分别拆成\(i\)的一个…
统计三元环 很多代码在bzoj都T诶 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <string> #define gc getchar() inline , f = ; ; c = gc;} + c - ', c = gc; return x;} #undef gc us…
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attachments Description The travel agency “Four Russians” is offering the new service for their clients. Unlike other agencies that only suggest one-way…
令三元环(i,j,k)中i>j>k,则每条边只需要从大点连向小点 设d[x]表示从x连出的边的条数 从1到n枚举点i,然后枚举所有与i相连的边(i,x)(x<i) 如果$d[x]\leq\sqrt{m}$,则依次判断与x相连的边(x,y)(y<x)中的y是否与i相连 否则,依次判断与i相连的边(i,y)(y<x)中的y是否与x相连 用Hash表支持$O(1)$询问 时间复杂度$O(m\sqrt{m})$ #include<cstdio> #include<a…
题目链接: http://codeforces.com/gym/100342 题意: 求三元环的个数 题解: 用bitset分别统计每个点的出度的边和入度的边. 枚举每一条边(a,b),计算以b为出度的边的终点构成的点集和以a为入度的边的起点够成的点集的交集,更新答案. 代码: #include<iostream> #include<cstring> #include<cstdio> #include<bitset> using namespace std;…
Problem J. TriatripTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attachments Description The travel agency “Four Russians” is offering the new service for their clients. Unlike other agencies that only suggest one-way…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6184 题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V=(A,B,C,D) && E=(AB,BC,CD,DA,AC) 解法: 可以看出A-structure是由两个有公共边的三元环构成的,然后就变成了这道题. http://www.cnblogs.com/spfa/p/7495438.html #include <stdio.h>…
传送门 好久没有做过图论题了-- 考虑\(k\)次方的组合意义,实际上,要求的所有方案中导出子图边数的\(k\)次方,等价于有顺序地选出其中\(k\)条边,计算它们在哪一些图中出现过,将所有方案计算出来的答案加起来. 对于\(k\)条边来说,如果它们占据了\(x\)个点,那么它们就会出现在\(2^{n-x}\)张图中. 那么\(k=1\)答案显然是\(m \times 2^{n-2}\) \(k=2\)时有\(3\)种情况:①两条边重合,等价于\(k=1\):②两条边不重合但共一个顶点,对于一条…
<题目链接> 题目大意:用用邻接矩阵表示一个有向图,现在让你求其中三元环的数量. 解题分析:先预处理得到所有能够直接到达每个点的集合$arrive[N]$和所有能够由当前点到达的集合$to[N]$.然后就是枚举三元环中的两个点$a,b$,然后再求$arrive[a]$与$to[b]$的交集,因为三元环中每个点都计算了一遍它所在所有三元环的数量,所以最后的答案就是所有点的交集之和/3.同时,因为$n\leq1500$,所以这里用到了bitset优化常数. #include <bits/st…
有向图中找一个三元环 题意: 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-1)/2 场),且每场一定能分出胜负.现在,你需要在其中找到三个人构成的这样的局面:A战胜B,B战胜C,C战胜A. 分析: 注意到一个重要的条件,就是图中有n*(n-1)/2条有向边. 正解的做法:在图中找一个环,如果存在一个环,那么一定存在一个三元环. 为什么? 对于一个环,是这样的,枚举除起点外的前两个点,即123,如果3可以到1,那么说明存在一个三元环. 否则,说明1一定连向了3,然后判断…
题目大意: 给定\(a, b, c\),求\(\sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) = 1][(j, k) = 1][(i, k) = 1]\) $a, b, c \leq 5*10^4 $ 首先莫比乌斯反演 $Ans = \sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) = 1…
https://vjudge.net/problem/Gym-100342J 题意:给出一个邻接矩阵有向图,求图中的三元环的个数. 思路: 利用bitset暴力求解,记得最后需要/3. #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<stack> #include<queue&g…
题面 传送门 给出一张无向图,求 \(4\) 个点构成两个有公共边的三元环的方案数. 题解 orz余奶奶,orz zzk 首先,如果我们知道经过每条边的三元环个数\(cnt_i\),那么答案就是\(\sum_{i=1}^m{cnt_i\choose 2}\) 所以现在问题就是该怎么数三元环 据说有一个设阈值的\(O(m\sqrt{m})\)的做法,不过常数太大了,这里不讲 我们把每一条边重定向,设它连接的两个点的度数分别为\(deg_u\)和\(deg_v\),那么把这条边定为从度数大的连向度数…
hdu 6184 Counting Stars(三元环计数) 题意: 给一张n个点m条边的无向图,问有多少个\(A-structure\) 其中\(A-structure\)满足\(V=(A,B,C,D)\) && \(E=(AB,BC,CD,DA,AC)\) 显然\(A-structure\)是由两个有公共边的三元环构成的 \(1 <=n <= 1e5\) \(1 <= m <= min(2e5,n*(n-1)/2)\) 思路: 三元环计数 做法1. ①统计每个点…
题目链接 hdu6184 题解 题意是让我们找出所有的这样的图形: 我们只需要求出每条边分别在多少个三元环中,记为\(x\),再然后以该点为中心的图形数就是\({x \choose 2}\) 所以我们只需找出所有三元环 据说这是一个套路题 我们将所有无向边改为有向边,由度数小的向度数大的连边,度数相同就由编号小的向编号大的 容易发现这样建图一定是一个\(DAG\) 然后我们枚举边,将边的两端点出边的到达的点打上标记,当一个点被打上同一个标记时,就成环了 因为是\(DAG\)容易发现这样找环不会重…
Problem Description Sunday最近对图论特别感兴趣,什么欧拉回路什么哈密顿回路,又是环又是树.在看完一本书后,他对自己特别有信心,便找到大牛牛犇犇,希望他出一题来考考自己. 在遥远的古代东方有N个城市,它们之间可以通过双向的道路相连.任意两个城市由不超过一条道路直接相连,而且没有城市的道路连向自身.但是牛犇犇是个纯情的小伙子,尽管他还没有女朋友,但他还是很讨厌第三者,以至于讨厌三这个数字.所以他希望Sunday能够构造一个N个城市的地图,这个地图中不能有任意三个城市能够相互…
给定 n 个点和 m 条边的一张图和一个值 k ,求图中边数为 k 的联通子图个数 mod 1e9+7. \(n \le 10^5, m \le 2 \times 10^5, 1 \le k \le 4\). 观察到 k 的值贼小,考虑分类讨论 下面代码中du[]代表点的度数.(度 找不到比较好的英文,而这个拼音比较巨,所以du是我的代码习惯中里出现拼音的少数几中情况之一)…
传送门 这道题的思路似乎可以给很多同时枚举三个量的反演题目提供一个很好的启发-- 首先有结论:\(d(ijk) = \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\).正确性证明考虑:对于质数\(p\),设\(i,j,k\)中质因子\(p\)的个数为\(a,b,c\).在\(x,y,z\)中至多只能有\(1\)个数含质因子\(p\),有以下情况:\(x,y,z\)中都没有\(…
题意:求有向图里面有多少个三元环. 思路:枚举起点A,遍历A可以到的B,然后求C的数量,C的数量位B可以到是地方X集合,和可以到A的地方Y集合的交集(X&Y). B点可以枚举,也可以遍历.(两种都试过,区别不大.) 枚举代码: #include<cstdio> #include<bitset> #include<cstdlib> #include<cstring> #include<iostream> #include<algori…