题意:

Little A is an astronomy lover, and he has found that the sky was so beautiful!
So he is counting stars now!
There are n stars in the sky, and little A has connected them by m non-directional edges.
It is guranteed that no edges connect one star with itself, and every two edges connect different pairs of stars.
Now little A wants to know that how many different "A-Structure"s are there in the sky, can you help him?
An “A-structure” can be seen as a non-directional subgraph G, with a set of four nodes V and a set of five edges E.
If V=(A,B,C,D) and E=(AB,BC,CD,DA,AC), we call G as an “A-structure”.
It is defined that “A-structure” G1=V1+E1 and G2=V2+E2 are same only in the condition that V1=V2 and E1=E2.

数据范围:

n≤105,m≤2∗105n\leq{10^5},m\leq{2*10^5}n≤105,m≤2∗105

Analysis:

翻译不是这题的重点,我们来讲讲这题真正要求的东西,其实就是懒得翻译,英文不好。
事实上就是让我们三元环计数,找出一条边存在于多少个三元环中。
我们考虑一种暴力:枚举一个点,枚举所有出边的点打上标记,再枚举出边,然后枚举出边的点的出边,看出边的点是否有标记,语文功底太差,超级绕 。我们设一个点的出度为outvout_voutv​,不难发现这样的复杂度为∑eu,voutu+outv\sum_{e_{u,v}}out_u+out_v∑eu,v​​outu​+outv​。让每条边只会被枚举两次。
考虑平衡出度,我们强制让度数小的连向度数大的点(有向边),度数相同按编号有序连边。
不难发现会是一张DagDagDag,因为如果有环的话,编号的偏序关系会矛盾。原先的三元环仍然可以如上枚举,且仅会被枚举一次,因为必定会有且仅有一个点入度为222。
这样复杂度变为∑eu,voutv\sum_{e_{u,v}}out_v∑eu,v​​outv​,那么每个点出度为多少呢,是不会超过m\sqrt{m}m​的。
考虑反证:若一个点出度超过m\sqrt{m}m​,因为连出去的点出度都大于其,所以至少m\sqrt{m}m​个点,每个点至少m\sqrt{m}m​条出边,出边总数大于mmm ,所以与条件矛盾。
那么总复杂度为O(mm)O(m\sqrt{m})O(mm​)。比较优秀,常数也比较小。
至于统计答案,只要算出每条边存在于多少个三元环,然后Ccnt2C_{cnt}^2Ccnt2​加起来就好。

Code:

# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
int st[N],to[N << 1],nx[N << 1],id[N << 1];
int vis[N][2],D[N],e[N << 1][2],cnt[N << 1];
int n,m,tot;
inline void add(int u,int v,int w)
{ to[++tot] = v,nx[tot] = st[u],id[tot] = w,st[u] = tot; }
int main()
{while (~scanf("%d%d",&n,&m)){memset(vis,0,sizeof(vis)),memset(st,0,sizeof(st)),memset(cnt,0,sizeof(cnt)),memset(D,0,sizeof(D)),tot = 0;for (int i = 1 ; i <= m ; ++i) scanf("%d%d",&e[i][0],&e[i][1]),++D[e[i][0]],++D[e[i][1]];for (int i = 1 ; i <= m ; ++i){if (e[i][0] > e[i][1]) swap(e[i][0],e[i][1]);if (D[e[i][0]] > D[e[i][1]]) swap(e[i][0],e[i][1]);add(e[i][0],e[i][1],i);}for (int i = 1 ; i <= n ; ++i){ for (int j = st[i] ; j ; j = nx[j]) vis[to[j]][0] = i,vis[to[j]][1] = j;for (int j = st[i] ; j ; j = nx[j])for (int k = st[to[j]] ; k ; k = nx[k])if (vis[to[k]][0] == i) ++cnt[id[j]],++cnt[id[k]],++cnt[vis[to[k]][1]];}ll ans = 0;for (int i = 1 ; i <= m ; ++i) if (cnt[i] > 1) ans += (ll)(cnt[i] - 1) * cnt[i] / 2;printf("%lld\n",ans);}return 0;
}

HDU6184 Counting Stars相关推荐

  1. 2021HDU多校8 - 7059 Counting Stars(线段树)

    题目链接:点击查看 题目大意:给出 nnn 个数字,需要执行 mmm 次操作,每次操作分为下列三种类型: 1 l r :输出区间 [l,r][l,r][l,r] 的 sumsumsum 和 2 l r ...

  2. D - Counting Stars HDU - 7059

    D - Counting Stars HDU - 7059 题解: 长度为n的序列a,有三个操作: 对某个区间进行询问 对于某个区间内的每个数ai,减去ai&(-ai) 对于某个区间内的每个数 ...

  3. 【HDU - 6184】Counting Stars(三元环计数,二分,优化暴力,O(m*sqrt(m)),图论)

    题干: Little A is an astronomy lover, and he has found that the sky was so beautiful! So he is countin ...

  4. 【HDOJ7059】Counting Stars(线段树,区间加,乘,标记)

    1004 Counting Stars 题意: 给出一个长为n的序列(1e5),支持3种操作: 1:查询[l,r]的区间和 2:修改[l,r]中每个数,都减去lowbit(x) 3:修改[l,r]中每 ...

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

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

  6. HDU - 6184 Counting Stars(思维+三元环)

    题目链接:点击查看 题目大意:给出一个 nnn 个点 mmm 条边组成的无向图,问图中有多少个"三元环对","三元环对"指的是两个三元环共用了一条边 题目分析: ...

  7. HDU 6184 2017广西邀请赛:Counting Stars(三元环)

    题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V=(A,B,C,D) && E=(AB,BC,CD,DA,AC) 可以看出A-struc ...

  8. 2017ACM/ICPC广西邀请赛

    2017ACM/ICPC广西邀请赛(感谢广西大学) 题号 题目 考点 难度 A A Math Problem 数论 签到题 B Color it C Counting Stars D Covering ...

  9. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)

    前言 依旧是白嫖账号,只打了一些题/kk 正题 1002 Buying Snacks 题目大意 nnn个物品,每个可以买一次也可以不买,如果买需要选择1/21/21/2块钱的,然后也可以相邻两个一起买 ...

  10. 2021年Github项目Top100

    2021年Github项目Top100 1. freeCodeCamp/freeCodeCamp 323k JavaScript freeCodeCamp.org's open source code ...

最新文章

  1. 简直让人欲罢不能!820个ML Python库,star超260万,持续周更中...
  2. VS2017调试闪退之Chrome
  3. Linux多线程编程实例解析
  4. Unity3D-声音处理
  5. (44)生成时钟场景
  6. 推荐一些好书(PHP方向)
  7. MySQL为啥不用平衡二叉树_MySQL的索引,为什么是B+而不是平衡二叉树
  8. web端访问远程桌面
  9. 美赛O奖论文翻译-2015埃博拉病毒
  10. 洛谷 P5056 【模板】插头dp
  11. 在腾讯云开通短信验证服务并完成群发消息测试
  12. VTN系列多通道振弦模拟信号采集仪常规操作
  13. MYSQL 大于号,小于号
  14. 类文件解析004-解析常量池元素
  15. 1124 Raffle for Weibo Followers(map)
  16. Excel添加下拉按键自动填充颜色
  17. python-pptx替换ppt模板的文本
  18. 最小连续m个合数---枚举
  19. 计算机程序设计实验报告4答案,程序设计实验报告4
  20. R统计绘图-factoextra包绘制PCA图

热门文章

  1. oracle公司的crm系统,原创-CRM客户关系管理系统设计-jsp+oracle
  2. 苹果说全是假的,市面不存在原装贴膜
  3. centos7 polkitd[661]: Unregistered Authentication Agent for unix-process:1781:115097 (system bus nam
  4. 黑苹果,Win7,Win10,Xp 各个系统镜像文件下载地址(备用)
  5. jd-gui反编译中文乱码
  6. html怎样让线段显示长度,CAD想要知道线段的长度有什么技巧吗?
  7. 解决Mac无法睡眠问题
  8. 结构体所占内存的字节数如何计算?
  9. java class命名_Java中class文件命名规则
  10. [精简]托福核心词汇23