bzoj 3498: PA2009 Cakes【瞎搞】
参考: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里加上u的点权,因为边总是从点权大的点连向点权小的点,所以判断出的三元环的价值总是当前u的点权
至于为什么复杂度是对的.......O(玄学)吧......
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cmath>
#include<vector>
using namespace std;
const int N=100005;
int n,m,d[N],cnt,h[N],lk[N],rk[N];
map<int,int>mp[N];
vector<int>g[N];
struct qwe
{
int ne,to;
}e[N<<2];
struct dian
{
int id,v;
}a[N];
bool cmp(const dian &a,const dian &b)
{
return a.v>b.v;
}
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
d[u]++;
mp[u][v]=1;
g[u].push_back(v);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i].v=read(),a[i].id=i;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
rk[a[i].id]=i;
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
if(rk[x]<rk[y])
add(x,y);
else
add(y,x);
}
long long ans=0;
int bs=sqrt(m)+1;
for(int k=1;k<=n;k++)
{
int u=a[k].id,v=a[k].v;;
for(int i=0,len=g[u].size();i<len;i++)
lk[g[u][i]]=u;
for(int i=0,len=g[u].size();i<len;i++)
{
int y=g[u][i];
if(d[y]>bs)
{
for(int j=0;j<len;j++)
if(mp[y][g[u][j]])
ans+=v;
}
else
{
for(int j=0,le=g[y].size();j<le;j++)
if(lk[g[y][j]]==u)
ans+=v;
}
}
}
printf("%lld\n",ans);
return 0;
}
bzoj 3498: PA2009 Cakes【瞎搞】的更多相关文章
- BZOJ 3498: PA2009 Cakes 一类经典的三元环计数问题
首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vect ...
- BZOJ 3498 PA2009 Cakes(三元环处理)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k ...
- 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/. \ ...
- BZOJ 4236: JOIOJI map瞎搞
分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...
- bzoj 2456: mode【瞎搞】
这题加个#include都会MLE-- 神思路,每个数抵消宇哥和它不同的数,最后剩下的就是众数 #include<cstdio> int n,la,x,tot; int main() { ...
- URAL 1203. Scientific Conference(瞎搞)
题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...
- Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞
Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...
- B. Salty Fish Go! -期望题(瞎搞题)
链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...
随机推荐
- 图论算法——最短路径Dijkstra,Floyd,Bellman Ford
算法名称 适用范围 算法过程 Dijkstra 无负权 从s开始,选择尚未完成的点中,distance最小的点,对其所有边进行松弛:直到所有结点都已完成 Bellman-Ford 可用有负权 依次对所 ...
- java读utf8 的txt文件,第一个字符为空或问号问题
参考:https://blog.csdn.net/yangzhichao888/article/details/79529756 https://blog.csdn.net/wangzhi291/ar ...
- HDU 4478 Where is King
题目大意: 一个王可以向周围8个方格走,如果都不通留在原地,t秒后,他可能存在的位置数 这题数据量过大,我们需要通过奇偶性判断,如果t = 0可以到达,说明 t=2,4,6....都可以到达 所以我这 ...
- 51nod 1126 求递推序列的第N项 && hdu - 1005 Number Sequence (求周期)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 http://acm.hdu.edu.cn/showproblem ...
- POJ 3320_Jessica's Reading Problem
题意: 每页书都对应一个知识点,问最少看连续的多少页,才能把所有知识点都看完? 分析: <挑战程序设计竞赛>介绍的尺取法,反复推进区间的开头和结尾,来求取满足条件的最小区间,先确定好一个满 ...
- Webstrom打开太慢
让webstrom将安装包目录屏蔽,settings-搜索file types-在ignore file and folders加入node_modules目录,操作方式如下:
- 86. LotusScript中的数组函数
R6对LotusScript有一些改进和增强,自那之后.Notes对象的接口时有补充和更新,但语言本身没有变化.那些改进就包括添加诸如ArrayGetIndex.ArrayUnique的实用函数. 但 ...
- C# 实现WEBSOCKET聊天应用示例
C# 实现WEBSOCKET聊天应用示例 http://blog.163.com/da7_1@126/blog/static/10407267820121016103055506/ 2012-11-1 ...
- Python开发【第5节】【函数基础】
1.函数 函数的本质就是功能的封装. 函数的作用 提升代码的重复利用率,避免重复开发相同代码 提高程序开发效率 便于程序维护 2.函数定义 def 函数名(参数): """ ...
- __init__、__str__、__del__方法
1.def__init__()方法: class Cat: """定义了一个Cat类""" #初始化对象 def __init__(self ...