BZOJ5206: [Jsoi2017]原力
BZOJ5206: [Jsoi2017]原力
https://lydsy.com/JudgeOnline/problem.php?id=5206
分析:
- 比较厉害的三元环问题。
- 设立阈值,当点的度数大于根号时,考虑直接枚举三个点算答案。
- 否则,只需要考虑存在一个点度数小于等于根号的情况,枚举这个点,枚举它的两个出边即可,需要保证它是所选三个点中度数小于根号的编号最小的一个。
- 如果距离用\(map\)存,时间复杂度会多一个\(\log\)
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <map>
#include <cmath>
using namespace std;
#define N 50050
#define M 200050
#define mod 1000000007
typedef long long ll;
int n,m,head[N],to[M],nxt[M],val[M],opp[M],cnt,du[N],a[N],la,vis[N];
char opt[5];
map<int,ll>dis[N][3];
inline void add(int u,int v,int w,int o) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; val[cnt]=w; opp[cnt]=o;
}
int main() {
scanf("%d%d",&n,&m);
int i,x,y,z,o,S=sqrt(n);
for(i=1;i<=m;i++) {
scanf("%d%d%d%s",&x,&y,&z,opt);
if(opt[0]=='R') o=0;
else if(opt[0]=='G') o=1;
else o=2;
dis[x][o][y]+=z;
dis[y][o][x]+=z;
add(x,y,z,o);
add(y,x,z,o);
du[x]++; du[y]++;
}
ll ans=0;
for(i=1;i<=n;i++) {
if(du[i]>S) a[++la]=i;
}
int j,k;
for(i=1;i<=la;i++) {
x=a[i];
for(j=1;j<=la;j++) if(dis[x][0][a[j]]) {
y=a[j]; ll t1=dis[x][0][y];
for(k=1;k<=la;k++) if(dis[y][1][a[k]]) {
z=a[k];
ans=(ans+t1*dis[y][1][z]%mod*dis[z][2][x])%mod;
}
}
}
for(x=1;x<=n;x++) if(du[x]<=S) {
vis[x]=1;
for(i=head[x];i;i=nxt[i]) if(!vis[to[i]]) {
ll t=val[i];
for(j=nxt[i];j;j=nxt[j]) if(!vis[to[j]]&&opp[i]!=opp[j]&&to[i]!=to[j]) {
ans=(ans+t*val[j]%mod*dis[to[i]][3-opp[i]-opp[j]][to[j]])%mod;
}
}
}
printf("%lld\n",ans);
}
BZOJ5206: [Jsoi2017]原力的更多相关文章
- BZOJ5206 JSOI2017原力(三元环计数)
首先将完全相同的边的权值累加.考虑这样一种trick:给边确定一个方向,由度数小的连向度数大的,若度数相同则由编号小的连向编号大的.这样显然会得到一个DAG.那么原图的三元环中就一定有且仅有一个点有两 ...
- BZOJ5206 [Jsoi2017]原力[根号分治]
这是一个三元环计数的裸题,只是多了一个颜色的区分和权值的计算罢了. 有一种根号分治的做法(by gxz) 这种复杂度的证明特别显然,思路非常简单,不过带一个log,可以用unordered_map或者 ...
- 【bzoj5206】[Jsoi2017]原力 根号分治+STL-map
题目描述 一个原力网络可以看成是一个可能存在重边但没有自环的无向图.每条边有一种属性和一个权值.属性可能是R.G.B三种当中的一种,代表这条边上原力的类型.权值是一个正整数,代表这条边上的原力强度.原 ...
- [JSOI2017]原力(分块+map(hash))
题目描述 一个原力网络可以看成是一个可能存在重边但没有自环的无向图.每条边有一种属性和一个权值.属性可能是R.G.B三种当中的一种,代表这条边上 原力的类型.权值是一个正整数,代表这条边上的原力强度. ...
- bzoj 5206 [Jsoi2017]原力
LINK:原力 一张无向图 这道题统计三元环的价值和.有重边但是无自环. 我曾经写过三元环计数 这个和那个题差不太多. 不过有很多额外操作 对于重边问题 我们把所有颜色相同的重边缩在一起 这样的话我们 ...
- [JSOI2017]原力
题目大意: 一个$n(n\le5\times10^4)$个点,$m(m\le10^5)$条边的无向图.每条边有一个边权$w_i(w_i\le10^6)$和一个附加属性$t_i(t_i\in\{R,G, ...
- 报名 | 蚂蚁金服ATEC科技大会 · 上海:数字金融新原力
小蚂蚁说: 2019年1月4日,蚂蚁金服ATEC城市峰会将以“数字金融新原力(The New Force of Digital Finance)”为主题,在中国上海举办.蚂蚁金服ATEC(Ant Te ...
- 第3届云原生技术实践峰会(CNBPS 2020)重磅开启,“原”力蓄势待发!
CNBPS 2020将在11月19-21日全新启动!作为国内最有影响力的云原生盛会之一,云原生技术实践峰会(CNBPS)至今已举办三届. 在2019年的CNBPS上,灵雀云CTO陈恺喊出"云 ...
- CSDN 原力(声望,影响力) -- 设计草案
目标 CSDN 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...
随机推荐
- LDAP注入
理解LDAP与LDAP注入 0x01 LDAP简介 查阅了一些网上的资料,读了好久还是觉得理解起来很困难,感觉还是不够干,之后看到的一个博客http://www.chinaunix.net/old_j ...
- 安装MySQL的详细步骤
安装步骤如下: 1.打开网址:http://www.mysql.com/ ↓ 2.选择“Download”->“Windows”(此安装步骤只是在Window10 中进行,如有需要,其他系统可参 ...
- ERROR 2003 (HY000): Can't connect to MySQL server on "" (113)
服务器为centos6. 这个原因是因为防火墙的问题 在mysql服务端执行 service iptables stop chkconfig iptables off #永久关闭防火墙 看情况执行 然 ...
- php一些常用功能封装
//二分查找 function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low + $hi ...
- DNS 缓存机制原理
DNS 缓存机制原理 简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存.在浏览器中访问的时候,会优先访问浏览器缓存, 如果未命中则访问OS缓存,最后再访问DNS服务器 ...
- mysql中的一些操作
查询mysql中事务提交的情况: show variables like '%commit%'; 可以查看当前autocommit值 在mysql数据库中它的默认值是"on"代表自 ...
- linux 安装tomcat7
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.81/bin/apache-tomcat-7.0.81.tar.gz 解压安装包 t ...
- eclipse修改端口启动多个tomcat
参考:https://blog.csdn.net/zl544434558/article/details/47857343 在一个eclipse启动多个tomcat,修改tomcat的端口是不可以的, ...
- centos下安装python2.7.9和pip以及数据科学常用的包
以前一直用ubantu下的python,ubantu比较卡.自己倾向于使用centos,但默认的python版本太低,所以重新装了一个python和ipython centos6.5安装python2 ...
- 【转】Android中的IOC框架,完全注解方式就可以进行UI绑定和事件绑定
转载请注明出处:http://blog.csdn.net/blog_wang/article/details/38468547 相信很多使用过Afinal和Xutils的朋友会发现框架中自带View控 ...