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 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...
随机推荐
- SOA、SOAP、REST、RPC
1.SOA SOA(面向服务的软件架构.Service Oriented Architecture),是一种软件设计模式,主要应用于不同应用组件之间通过某种协议来互操作.例如典型的 通信网络协议.因 ...
- CSS伪元素实现的3D按钮
在线演示 本地下载
- 20145230《java程序设计》第6周学习总结
20145230 <Java程序设计>第6周学习总结 教材学习内容 串流设计的概念 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出,可以 ...
- IIS部署PHP项目并与mysql完美结合
在上一篇文章中,提到iis与apache共用80端口,但是发现很多问题,例如 IIS网站有支付功能,而微信支付是不支持带有端口的网址的,虽然通过apche代理,在外面看来没有端口,可是内部还是避免不了 ...
- URI Is Not Registered
使用IntelliJ Maven生成archetype时候,偶然会出现xml文件的头定义提示错误 URI is not registered 例如: 解决方法: 鼠标点击红色字,然后Intellij出 ...
- EF Code-First 学习之旅 DataAnnotations
数据注解:配置选项的子集:Fluent API包含所有选项 System.ComponentModel.DataAnnotations Attributes: Attribute Descriptio ...
- lua 写逻辑打印log时,打印到一半后停止不再打印,程序停止
问题描述:ubuntu下用lua开发游戏电子邮件模块,自己测试时向用户推送100封,而用户最多只能有50封.这是调用sysdelete删除一些邮件.当打印log时,打印到一半后程序中途停止.将打印lo ...
- Codeforces Round #390 (Div. 2) A B C D
这是一场比较难的div2 ... 比赛的时候只出了AB A很有意思 给出n个数 要求随意的把相邻的数合并成任意多数 最后没有为0的数 输出合并区间个数与区间 可以想到0可以合到任何数上并不改变该数的性 ...
- hdu 5890 Eighty seven 暴力+bitset优化背包
Eighty seven Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) P ...
- 3DES双倍长加密
import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import ...