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]原力的更多相关文章

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

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

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

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

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

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

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

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

  5. bzoj 5206 [Jsoi2017]原力

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

  6. [JSOI2017]原力

    题目大意: 一个$n(n\le5\times10^4)$个点,$m(m\le10^5)$条边的无向图.每条边有一个边权$w_i(w_i\le10^6)$和一个附加属性$t_i(t_i\in\{R,G, ...

  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. Loadrunder脚本篇——webservice接口测试(二)

    1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“Import” ->弹出窗中选择“URL”,填写wsdl地址,导 ...

  2. imx6q Xorg下Qt应用开机自启动及添加桌面快捷启动图标的方法

    启动scene3d例子: root@imx6qsabresd:/etc/X11/Xsession.d# ls -altotal 36drwxr-xr-x 2 root root 4096 Mar 12 ...

  3. Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c

    Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c 课后作业 1. 编写 inotify_epoll.c, 用它来监测tmp/目录: 有文件被创建/删除, 有文 ...

  4. 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】

    平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...

  5. mongodb 中的Multikey Index Bounds解释$elemMatch

    首先说一下 $elemMatch的用法: { _id: 1, results: [ 82, 85, 88 ] } { _id: 2, results: [ 75, 88, 89 ] } $elemMa ...

  6. Python 循环语句(while, for)

    # while的使用 # 要注意些循环的时候,要考虑好循环的结束 # 考虑循环结束的方法有2种: # 1.考虑在循环体里改变while 的条件 # 2.在循环体通过break 语句跳出循环 # 方法1 ...

  7. python批量修改文件名称

    参考文章:http://www.cnblogs.com/ma6174/archive/2012/05/04/2482378.html 最近遇到一个问题,在网上下载了一批视频课程,需要将每节课的名称标号 ...

  8. 【P2236】彩票(搜索+剪枝)

    想说这个题要是想做出来就必须不干一件事情,那就是不要点开标签..点开标签看到那些平衡树什么的.... 首先,我们要理解这个题的题意.买彩票是什么大家都应该知道吧,一般来说,就是从很多数里面选出来几个, ...

  9. poj 2116 Death to Binary? 模拟

    Death to Binary? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1707   Accepted: 529 D ...

  10. djang-分页

    分页 views from django.shortcuts import render,HttpResponse # Create your views here. from app01.model ...