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 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...
随机推荐
- windows下docker toolbox无法下载boot2docker.iso
GitHub连不上导致自动更新失败.(网络形势严峻!) 通过别的途径手动下载了指定的最新的boot2docker.iso文件.(比方说迅雷!比方说迅雷!比方说迅雷!) https://github.c ...
- javascript; JS版HtmlEncode方法,结果与C#中HttpUtility.HtmlEncode方法一样。
<script type="text/javascript"> function HTMLEncode(html) { var temp = document.crea ...
- VC引用动态库
1. 程序所在目录 2. 进程当前目录 3. 系统目录(C:\WINDOWS\System32) 4. Windows目录(C:\WINDOWS) 5. PATH环境变量指向的目录
- 【Head First Servlets and JSP】笔记6:什么是响应首部 & 快速搭建一个简单的测试环境
搭建简单的测试环境 什么是响应首部 最简单的响应首部——Content-Type 设置响应首部 请求重定向与响应首部 在浏览器中查看Response Headers 1.先快速搭建一个简单的测试环境, ...
- 0625 Django 基础
相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 python man ...
- Zabbix3.2 客户端安装
查看客户端环境: # cat /etc/redhat-release CentOS Linux release (Core) # uname -r -.el7.x86_64 Centos7 客户端: ...
- juniper常用命令(二)
Juniper防火墙基本命令 常用查看命令 Get int查看接口配置信息 Get int ethx/x查看指定接口配置信息 Get mip查看映射ip关系 Get route查看路由表 Get po ...
- MySQL实时性能监控工具doDBA tools
doDBA tools是什么? doDBA tools是一个基于控制台的远程监控工具,它不需要在本地/远程系统上安装任何软件,它可以实时收集操作系统.MySQL.InnoDB的实时性能状态数据,并可以 ...
- 生产环境中,通过域名映射ip切换工具SwitchHosts
项目中,经常需要配置host.将某个域名指向某个ip.手动配置C:\Windows\System32\drivers\etc\hosts,非常不方便.这里分享一个可以高效切换host工具:Switch ...
- 如何检查BioPerl是否正确安装
如果是Linux系统,随意打开一个终端:如果用的是Windows系统,那么打开命令提示符. 输入以下命令: perldoc Bio::SeqIO 以上命令的作用是查看Bio::SeqIO模块的文档是否 ...