首先引入一个最常见的经典三元环问题。

#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(int i=1; i<=m; i++){
int x,y;
scanf("%d %d", &x,&y);
g[x].push_back(y);
g[y].push_back(x);
mp[x][y] = 1;
mp[y][x] = 1;
in[x]++;
in[y]++;
}
for(int i=1; i<=n; i++){
if(in[i]<=sqrt(m)) low.push_back(i);
else high.push_back(i);
}
int ans = 0;
memset(vis, false, sizeof(vis));
for(int i=0; i<low.size(); i++){
int x = low[i];
vis[x] = 1;
for(int j=0; j<g[x].size(); j++){
int y = g[x][j];
if(vis[y]) continue;
for(int k=j+1; k<g[x].size(); k++){
int z = g[x][k];
if(vis[z]) continue;
if(mp[y].count(z)) ans++;
}
}
}
for(int i=0; i<high.size(); i++){
for(int j=i+1; j<high.size(); j++){
int x, y, z;
x = high[i];
y = high[j];
if(mp[x].count(y)==0) continue;
for(int k=j+1; k<high.size(); k++){
z = high[k];
if(mp[y].count(z)&&mp[x].count(z)) ans++;
}
}
}
printf("%d\n", ans);
return 0;
}

BZOJ 3948

//BZOJ 3498
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
typedef long long LL;
struct node{
int val,id;
node(){}
node(int val,int id):val(val),id(id){}
bool operator<(const node &rhs)const{
return val>rhs.val;
}
}a[maxn];
vector <int> G[maxn];
map <int, int> mp[maxn];
int Rank[maxn], out[maxn], linker[maxn];
int n, m; int main()
{
scanf("%d %d", &n,&m);
for(int i=1; i<=n; i++){
scanf("%d", &a[i].val);
a[i].id = i;
}
sort(a+1, a+n+1);
for(int i=1; i<=n; i++) Rank[a[i].id] = i;
for(int i=1; i<=m; i++){
int x, y;
scanf("%d %d", &x,&y);
if(Rank[x]<Rank[y]){
G[x].push_back(y), out[x]++, mp[x][y]=1;
}else{
G[y].push_back(x), out[y]++, mp[y][x]=1;
}
}
LL ans = 0;
for(int i=1; i<=n; i++){
int x = a[i].id, y;
for(int j=0; j<G[x].size(); j++){
linker[G[x][j]] = x;
}
for(int j=0; j<G[x].size(); j++){
y = G[x][j];
if(out[y]>sqrt(m)+1){
for(int k=0; k<G[x].size(); k++){
int z = G[x][k];
if(mp[y].count(z)) ans += a[i].val;
}
}else{
for(int k=0; k<G[y].size(); k++){
int z = G[y][k];
if(linker[z] == x) ans += a[i].val;
}
}
}
}
printf("%lld\n", ans);
return 0;
}

BZOJ 3498: PA2009 Cakes 一类经典的三元环计数问题的更多相关文章

  1. BZOJ.3498.[PA2009]Cakes(三元环 枚举)

    题目链接 感觉我可能学的假的(复杂度没问题,但是常数巨大). 一个比较真的说明见这儿:https://czyhe.me/blog/algorithm/3-mem-ring/3-mem-ring/. \ ...

  2. BZOJ 3498 PA2009 Cakes(三元环处理)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k ...

  3. BZOJ 3498 PA2009 Cakes

    本题BZOJ权限题,但在bzojch上可以看题面. 题意: N个点m条无向边,每个点有一个点权a. 对于任意一个三元环(i,j,k)(i<j<k),它的贡献为max(ai,aj,ak) 求 ...

  4. bzoj 3498: PA2009 Cakes【瞎搞】

    参考:https://www.cnblogs.com/spfa/p/7495438.html 为什么邻接表会TTTTTTTLE啊...只能用vector? 把点按照点权从大到小排序,把无向边变成排名靠 ...

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

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

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

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

  7. Bzoj 3498 Cakes(三元环)

    题面(权限题就不放题面了) 题解 三元环模板题,按题意模拟即可. #include <cstdio> #include <cstring> #include <vecto ...

  8. [BZOJ 3498] [PA 2009] Cakes

    Description \(n\) 个点 \(m\) 条边,每个点有一个点权 \(a_i\). 对于任意一个三元环 \((i,j,k)(i<j<k)\),它的贡献为 \(\max(a_i, ...

  9. 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2473  Solved: 1211[Submit][Statu ...

随机推荐

  1. cf609E Minimum Spanning Tree For Each Edge (kruskal+倍增Lca)

    先kruskal求出一个最小生成树,然后对于每条非树边(a,b),从树上找a到b路径上最大的边,来把它替换掉,就是包含这条边的最小生成树 #include<bits/stdc++.h> # ...

  2. 【bzoj1507】 JSOI2008—Blue Mary的旅行

    http://www.lydsy.com/JudgeOnline/problem.php?id=1570 (题目链接) 题意 给出$m$个航班,每天只能做一次飞机,有$T$人从起点到终点,问最晚到达的 ...

  3. codeforces 793B - Igor and his way to work(dfs、bfs)

    题目链接:http://codeforces.com/problemset/problem/793/B 题目大意:告诉你起点和终点,要求你在只能转弯两次的情况下能不能到达终点.能就输出“YES”,不能 ...

  4. WCF快速搭建Demo

    WCF快速搭建Demo ps:本Demo只是演示如何快速建立WCF 1.首先完成IBLL.BLL.Model层的搭建,由于数据访问层不是重点,WCF搭建才是主要内容,所以本Demo略去数据访问层. 新 ...

  5. Git中设置代理和取消代理

    设置Socks5代理 git config --global http.proxy 'socks5://127.0.0.1:1080' && git config --global h ...

  6. 十三、java_GUI

    目录: 一.AWT 二.组件和容器 三.布局管理器 四.事件处理 五.java图形 六.window事件 一.AWT AWT(Abstract Window Toolkit)包括了很多类和接口,用于J ...

  7. LoadRunner进行参数化的九种方式取值和连接数据库取值

    一.连接mysql数据库取值 1.首先安装odbc驱动 链接: https://pan.baidu.com/s/1WAYd4ygQqIrbB08S01hSkg 提取码: gdfs 2.操作步骤如下图: ...

  8. python爬虫 前程无忧网页抓取

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  9. CENTOS 升级Nodejs 到最新版本

    1.去官网下载和自己系统匹配的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通过  uname -a ...

  10. 函数和常用模块【day05】:文件目录开发规范(七)

    本节内容 1.背景 2.设计目录结构的好处 3.关于readme的内容 4.关于requirements.txt和setup.py 5.关于配置文件的使用方法 一.背景 "设计项目目录结构& ...