题目链接

hdu6184

题解

题意是让我们找出所有的这样的图形:

我们只需要求出每条边分别在多少个三元环中,记为\(x\),再然后以该点为中心的图形数就是\({x \choose 2}\)

所以我们只需找出所有三元环

据说这是一个套路题

我们将所有无向边改为有向边,由度数小的向度数大的连边,度数相同就由编号小的向编号大的

容易发现这样建图一定是一个\(DAG\)

然后我们枚举边,将边的两端点出边的到达的点打上标记,当一个点被打上同一个标记时,就成环了

因为是\(DAG\)容易发现这样找环不会重复

然后就是时间复杂度证明

是\(O(m\sqrt{m})\)的

我们只需证明每个点出度不大于\(\sqrt{m}\)

假设有一个点出度大于\(\sqrt{m}\),那么由建边方式我们至知道出边到达的点度数不比该点小,这样总的边数就大于\(m\)了,不符

所以点的度数是\(O(\sqrt{m})\)的

为什么在\(hdu\)使用\(pair\)会\(CE\) = =

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<utility>
#define Redge(u) for (int k = h[u]; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) (node){a,b}
#define cls(s) memset(s,0,sizeof(s))
#define cp node
#define LL long long int
using namespace std;
const int maxn = 100005,maxm = 200005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
struct node{
int first,second;
};
int h[maxn],ne;
struct EDGE{int to,nxt,id;}ed[maxm];
inline void build(int u,int v,int x){
ed[++ne] = (EDGE){v,h[u],x}; h[u] = ne;
}
int de[maxn],a[maxm],b[maxm],now,n,m,ans[maxm];
cp vis[maxn];
int main(){
while (~scanf("%d%d",&n,&m)){
ne = now = 0;
REP(i,n) vis[i] = mp(0,0),h[i] = de[i] = 0;
REP(i,m){
ans[i] = 0;
a[i] = read(); b[i] = read();
de[a[i]]++; de[b[i]]++;
}
REP(i,m){
if (de[a[i]] > de[b[i]] || (de[a[i]] == de[b[i]] && a[i] > b[i]))
swap(a[i],b[i]);
build(a[i],b[i],i);
}
REP(i,m){
now++;
Redge(a[i]) vis[ed[k].to] = mp(now,ed[k].id);
Redge(b[i]) if (vis[ed[k].to].first == now){
ans[i]++;
ans[ed[k].id]++;
ans[vis[ed[k].to].second]++;
}
}
LL ret = 0;
REP(i,m) if (ans[i] > 1) ret += ans[i] * (ans[i] - 1) / 2;
printf("%lld\n",ret);
}
return 0;
}

hdu6184 Counting Stars 【三元环计数】的更多相关文章

  1. [hdu 6184 Counting Stars(三元环计数)

    hdu 6184 Counting Stars(三元环计数) 题意: 给一张n个点m条边的无向图,问有多少个\(A-structure\) 其中\(A-structure\)满足\(V=(A,B,C, ...

  2. Codechef SUMCUBE Sum of Cubes 组合、三元环计数

    传送门 好久没有做过图论题了-- 考虑\(k\)次方的组合意义,实际上,要求的所有方案中导出子图边数的\(k\)次方,等价于有顺序地选出其中\(k\)条边,计算它们在哪一些图中出现过,将所有方案计算出 ...

  3. 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)

    [BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞 ...

  4. loj#6076「2017 山东一轮集训 Day6」三元组 莫比乌斯反演 + 三元环计数

    题目大意: 给定\(a, b, c\),求\(\sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) ...

  5. BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)

    题面 传送门(bzoj) 传送门(CF) \(llx\)身边妹子成群,这天他需要从\(n\)个妹子中挑出\(3\)个出去浪,但是妹子之间会有冲突,表现为\(i,j\)之间连有一条边\((i,j)\), ...

  6. LOJ2565 SDOI2018 旧试题 莫比乌斯反演、三元环计数

    传送门 这道题的思路似乎可以给很多同时枚举三个量的反演题目提供一个很好的启发-- 首先有结论:\(d(ijk) = \sum\limits_{x|i}\sum\limits_{y|j}\sum\lim ...

  7. HDU6184【Counting Stars】(三元环计数)

    题面 传送门 给出一张无向图,求 \(4\) 个点构成两个有公共边的三元环的方案数. 题解 orz余奶奶,orz zzk 首先,如果我们知道经过每条边的三元环个数\(cnt_i\),那么答案就是\(\ ...

  8. HDU 6184 Counting Stars 经典三元环计数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6184 题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V ...

  9. FJWC2019 子图 (三元环计数、四元环计数)

    给定 n 个点和 m 条边的一张图和一个值 k ,求图中边数为 k 的联通子图个数 mod 1e9+7. \(n \le 10^5, m \le 2 \times 10^5, 1 \le k \le ...

随机推荐

  1. [CF106C]Buns

    面包师Lavrenty打算用馅料做几个面包,然后把它们卖掉. Lavrenty有\(n\)克面团和\(m\)种不同的馅料.馅料种类的下标从\(1到m\),他知道他的第\(i\)种馅料剩下\(a_i\) ...

  2. 175. Invert Binary Tree【LintCode by java】

    Description Invert a binary tree. Example 1 1 / \ / \ 2 3 => 3 2 / \ 4 4    解题:题目要求讲二叉树的左子树和右子树对调 ...

  3. python简单循环生成器

    import time #循环生成器 def traversal_list(alist, i): while True: length = len(alist) i = i%(length) yiel ...

  4. leetcode个人题解——#11 Container with most water

    class Solution { public: int maxArea(vector<int>& height) { ; ; ; while(l < r) { int h ...

  5. httpd 2.2.15 添加流媒体模块

    项目中使用的一直都是 httpd  2.2.15  用于播放视频资源,近期有个新产品上线发现快进视频会出现卡顿情况,因此添加了流媒体模块.(怀疑是新产品中的播放器进行了更改) 原文:http://li ...

  6. Python中的namespace package

    在Python 3.3之前,一个目录想被当成package被导入,必须包含__init__.py文件:而在Python 3.3及以后的版本中,__init__.py文件可以不需要,直接使用import ...

  7. Code obfuscatio (翻译!)

    Description Kostya likes Codeforces contests very much. However, he is very disappointed that his so ...

  8. Red and Black(DFS深搜实现)

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

  9. iOS- UIScrollView、UIPageControl分页浏览图片

    1.先介绍下UIScrollView的常见属性 @property(nonatomic) CGPoint contentOffset; // 记录UIScrollView滚动的位置 @property ...

  10. OSG数学基础:坐标系统

    坐标系是一个精确定位对象位置的框架,所有的图形变换都是基于一定的坐标系进行的. 三维坐标系总体上可以分为两大类:左手坐标系和右手坐标系. 常用的坐标系:世界坐标系.物体坐标系和摄像机坐标系. 世界坐标 ...