题目大意:
  一个$n(n\le5\times10^4)$个点,$m(m\le10^5)$条边的无向图。每条边有一个边权$w_i(w_i\le10^6)$和一个附加属性$t_i(t_i\in\{R,G,B\})$。定义一个三元环的价值为个条边权值之积,求所有满足每条边附加属性互不相同的三元环的价值和。

思路:
  对结点按照度数分为两组分块,度数$\ge\sqrt m$的算作重点,否则算轻点。对于三元环三个顶点都是重点的情况,直接暴力即可,复杂度$O(m\sqrt m)$。对于含有轻点的三元环,$O(m)$枚举第一个点及一条出边,$O(\sqrt m)$枚举第二条出边,复杂度还是$O(m\sqrt m)$。这里对于边权的查询应该是利用哈希实现的,但是用map也能过,复杂度$O(m\sqrt m\log m)$。

 #include<map>
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
typedef long long int64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
inline int gettype() {
register char ch;
while(!isalpha(ch=getchar()));
return ch!='R'?ch!='G'?::;
}
const int N=5e4+,M=2e5,mod=1e9+;
struct Edge {
int to,w,type,next;
};
Edge e[M];
int h[N],sz,deg[N],c[N];
struct Node {
int u,v,type;
bool operator < (const Node &another) const {
if(u!=another.u) return u<another.u;
if(v!=another.v) return v<another.v;
return type<another.type;
}
};
std::map<Node,int> map;
inline void add_edge(const int &u,const int &v,const int &w,const int &t) {
e[sz]=(Edge){v,w,t,h[u]};h[u]=sz++;deg[u]++;
(map[(Node){u,v,t}]+=w)%=mod;
}
int main() {
memset(h,-,sizeof h);
const int n=getint(),m=getint(),block=sqrt(m);
for(register int i=;i<m;i++) {
const int u=getint(),v=getint(),w=getint(),t=gettype();
add_edge(u,v,w,t);
add_edge(v,u,w,t);
}
for(register int i=;i<=n;i++) {
if(deg[i]>=block) c[++c[]]=i;
}
int ans=;
for(register int i=;i<=c[];i++) {
for(register int j=;j<=c[];j++) {
for(register int k=;k<=c[];k++) {
(ans+=(int64)map[(Node){c[i],c[j],}]*map[(Node){c[j],c[k],}]%mod*map[(Node){c[k],c[i],}]%mod)%=mod;
}
}
}
for(register int i=;i<=n;i++) {
if(deg[i]>=block) continue;
for(register int j=h[i];~j;j=e[j].next) {
if(deg[e[j].to]<block&&e[j].to<=i) continue;
for(register int k=e[j].next;~k;k=e[k].next) {
if(e[j].type==e[k].type||(deg[e[k].to]<block&&e[k].to<=i)) continue;
(ans+=(int64)map[(Node){e[j].to,e[k].to,-e[j].type-e[k].type}]*e[j].w%mod*e[k].w%mod)%=mod;
}
}
}
printf("%d\n",ans);
return ;
}

[JSOI2017]原力的更多相关文章

  1. BZOJ5206: [Jsoi2017]原力

    BZOJ5206: [Jsoi2017]原力 https://lydsy.com/JudgeOnline/problem.php?id=5206 分析: 比较厉害的三元环问题. 设立阈值,当点的度数大 ...

  2. 【bzoj5206】[Jsoi2017]原力 根号分治+STL-map

    题目描述 一个原力网络可以看成是一个可能存在重边但没有自环的无向图.每条边有一种属性和一个权值.属性可能是R.G.B三种当中的一种,代表这条边上原力的类型.权值是一个正整数,代表这条边上的原力强度.原 ...

  3. [JSOI2017]原力(分块+map(hash))

    题目描述 一个原力网络可以看成是一个可能存在重边但没有自环的无向图.每条边有一种属性和一个权值.属性可能是R.G.B三种当中的一种,代表这条边上 原力的类型.权值是一个正整数,代表这条边上的原力强度. ...

  4. bzoj 5206 [Jsoi2017]原力

    LINK:原力 一张无向图 这道题统计三元环的价值和.有重边但是无自环. 我曾经写过三元环计数 这个和那个题差不太多. 不过有很多额外操作 对于重边问题 我们把所有颜色相同的重边缩在一起 这样的话我们 ...

  5. BZOJ5206 JSOI2017原力(三元环计数)

    首先将完全相同的边的权值累加.考虑这样一种trick:给边确定一个方向,由度数小的连向度数大的,若度数相同则由编号小的连向编号大的.这样显然会得到一个DAG.那么原图的三元环中就一定有且仅有一个点有两 ...

  6. BZOJ5206 [Jsoi2017]原力[根号分治]

    这是一个三元环计数的裸题,只是多了一个颜色的区分和权值的计算罢了. 有一种根号分治的做法(by gxz) 这种复杂度的证明特别显然,思路非常简单,不过带一个log,可以用unordered_map或者 ...

  7. 报名 | 蚂蚁金服ATEC科技大会 · 上海:数字金融新原力

    小蚂蚁说: 2019年1月4日,蚂蚁金服ATEC城市峰会将以“数字金融新原力(The New Force of Digital Finance)”为主题,在中国上海举办.蚂蚁金服ATEC(Ant Te ...

  8. ​第3届云原生技术实践峰会(CNBPS 2020)重磅开启,“原”力蓄势待发!

    CNBPS 2020将在11月19-21日全新启动!作为国内最有影响力的云原生盛会之一,云原生技术实践峰会(CNBPS)至今已举办三届. 在2019年的CNBPS上,灵雀云CTO陈恺喊出"云 ...

  9. CSDN 原力(声望,影响力) -- 设计草案

    目标 CSDN 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...

随机推荐

  1. java初学1

    1.Java主要技术和分支以及应用领域 (1)Java SE Java Platform,Standard Edition,Java SE 以前称为J2SE.它允许开发和部署在桌面.服务器.嵌入式环境 ...

  2. Python网络编程(OSI模型、网络协议、TCP)

    前言: 什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系. 在数学上,网络是一种图,一般认为专指加权图. 网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类 型的实际问题中抽象 ...

  3. 带外键Mysql

    带外键的表格的查询 复制代码 //////////////////查询指定表外键约束 select a.name as 约束名, object_name(b.parent_object_id) as ...

  4. mininet、floodlight在第一次SDN上机作业中出现的一些问题

    mininet.floodlight在第一次SND上机作业中出现的一些问题 首先给出链接 VMware安装 mininet安装 floodlight安装及问题,各个版本Ubuntu SDN第一次上机作 ...

  5. Hexo博客收录百度和谷歌-基于Next主题

    Hexo博客收录百度和谷歌-基于Next主题(应该是比较全面的一篇教程) 我们的博客做出来当然是希望别人来访问,但是Github和Coding都做了防爬虫处理,这样子我们博客可能就无法被搜索引擎收录, ...

  6. [洛谷P1903][国家集训队]数颜色

    题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3 ...

  7. 【SPOJ220】Relevant Phrases of Annihilation (SA)

    成功完成3连T!   嗯没错,三道TLE简直爽到不行,于是滚去看是不是模版出问题了..拿了3份其他P党的模版扔上去,嗯继续TLE...蒟蒻表示无能为力了... 思路像论文里面说的,依旧二分长度然后分组 ...

  8. [AGC010E] Rearranging [拓扑排序+堆]

    题面 传送门 思路 首先,一个显然的结论是:Alice调整过后的序列中任意两个不互质的数的相对顺序无法改变 那么我们可以以这个性质为突破口 我们在两个不互质的权值的点之间连一条边(没错这是个图论题!! ...

  9. 51Nod 1561 另一种括号序列

    题目链接 分析: 卡常数~~~好气啊~~~这是看脸的时代啊~~~ $A$代表$($的数量,$B$代表$)$的数量... 如果$($的数量多于$)$的数量,那么最有方案显然是添加$A-B$个$)$... ...

  10. PHP命令行执行程序php.exe使用及常用参数

    PHP命令行执行程序php.exe参数说明 -f <file>:以命令行方式运行指定的PHP文件,只要指定具体的PHP文件(带绝对路径),php.exe就可以执行PHP文件,所以这个参数单 ...