$n$ 点 $m$ 边图的有限制三元环个数

首先将所有左右端点并且属性相同的边的权值相加,合并为一条边

在这只之前得先排序
排序之前得先判断是否需要交换左右端点的位置 T_T

然后统计三元环

补充说明按照上一篇博客的做法统计的正确性

考虑一个三元环 $(u, v), (v, v_2), (u, v_2)$
建边之后一定存在且只存在一个点的出度为2,这也就是改图成为 $DAG$ 的原因

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std; #define gc getchar()
inline int read() {int x = ; char c = gc; while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc; return x;}
#undef gc const int N = 5e4 + , M = 1e5 + , Mod = 1e9 + ; int n, m;
int A[M], B[M], W[M], C[M], Id[M];
int du[N];
int vis[N][], cost[N][]; inline int Get_() {
char c = getchar();
return c == 'R' ? : (c == 'G' ? : );
} inline bool Cmp(const int &a, const int &b) {
if(A[a] != A[b]) return A[a] < A[b];
if(B[a] != B[b]) return B[a] < B[b];
return C[a] < C[b];
} int cnt, head[N];
struct Node {int v, w, nxt, col;} G[M]; inline void Add(int u, int v, int w, int col) {
G[++ cnt].v = v;
G[cnt].w = w;
G[cnt].col = col;
G[cnt].nxt = head[u];
head[u] = cnt;
} int main() {
n = read(), m = read();
for(int i = ; i <= m; i ++) {
A[i] = read(), B[i] = read(), W[i] = read(), C[i] = Get_(), Id[i] = i;
if(A[i] > B[i]) swap(A[i], B[i]);
}
sort(Id + , Id + m + , Cmp);
int t = ;
for(int i = ; i <= m; i ++) {
if(A[Id[i]] == A[Id[t]] && B[Id[i]] == B[Id[t]] && C[Id[i]] == C[Id[t]]) W[Id[t]] = (W[Id[t]] + W[Id[i]]) % Mod;
else t ++, Id[t] = Id[i];
}
m = t;
for(int i = ; i <= m; i ++) du[A[Id[i]]] ++, du[B[Id[i]]] ++;
for(int i = ; i <= n; i ++) head[i] = -;
for(int i = ; i <= m; i ++) {
if(du[A[Id[i]]] > du[B[Id[i]]] || (du[A[Id[i]]] == du[B[Id[i]]] && A[Id[i]] > B[Id[i]]))
Add(B[Id[i]], A[Id[i]], W[Id[i]], C[Id[i]]);
else Add(A[Id[i]], B[Id[i]], W[Id[i]], C[Id[i]]);
}
long long Answer();
for(int k = ; k <= m; k ++) {
for(int i = head[A[Id[k]]]; ~ i; i = G[i].nxt)
if(G[i].col != C[Id[k]]) vis[G[i].v][G[i].col] = k, cost[G[i].v][G[i].col] = G[i].w;
long long tot();
for(int i = head[B[Id[k]]]; ~ i; i = G[i].nxt) {
if(G[i].col != C[Id[k]]) {
int need_col = - C[Id[k]] - G[i].col;
if(vis[G[i].v][need_col] == k) tot = (tot + 1LL * cost[G[i].v][need_col] * G[i].w) % Mod;
}
}
Answer = (Answer + (tot * W[Id[k]]) % Mod) % Mod;
}
cout << Answer << "\n";
return ;
}

bzoj 5206的更多相关文章

  1. bzoj 5206 [Jsoi2017]原力

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

  2. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  3. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  4. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  5. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  6. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  7. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  8. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  9. 【splay】文艺平衡树 BZOJ 3223

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

随机推荐

  1. 机器学习xgboost参数解释笔记

    首先xgboost有两种接口,xgboost自带API和Scikit-Learn的API,具体用法有细微的差别但不大. 在运行 XGBoost 之前, 我们必须设置三种类型的参数: (常规参数)gen ...

  2. TCP(上)

    tcp头格式: TCP状态位: SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置. TCP窗口: TCP 要做流量控制,通信双方各声明 ...

  3. MVC模式下unity配置,报错“No connection string named '**Context' could be found in the application config file”

     写在前面: 第一次配置时好好的,后来第二次改到MVC模式,把依赖注入写成字典的单例模式时,由于新建的ORM(数据库映射模型EF),怎么弄都不用,一直报错"No connection str ...

  4. React 脚手架支持Typescript和Sass

    首先,创建React工程目录,以及选择Typescript版本 进入在my-app目录,安装node-sass 然后再安装webpack的sass-loader  接下来进入node_modules ...

  5. UI5-技术篇-Navigation And Routing

    主要记录下Router设置过程中出现的几个问题 1.View 首页设置 controlId 2.Manifest设置 2.1设置启动页 2.2设置默认配置 2.3设置Targets 首页设置 子页设置 ...

  6. Privacy Description

    This application respects and protects the privacy of all users who use the service. In order to pro ...

  7. dubbo和mq的使用场景

    MQ:消息队列.生产者消费者模式,可用于对消息实时性要求不高的场景.多进程之间间接调用关系 Dubbo:RPC实现.多进程之间直接调用关系 dubbo 1,rpc的分布式集群支持:负载均衡是对外提供一 ...

  8. servlet版本与tomcat版本对应关系,各版本web.xml头信息写法

    The mapping between the specifications and the respective Apache Tomcat versions is: Servlet Spec JS ...

  9. spice在桌面虚拟化中的应用系列之三(USB映射实现,SSL加密,密码认证,多客户端支持)

    本系列其它文章 spice在桌面虚拟化中的应用系列之一(spice简介,性能优化等) spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射) 1.spice ...

  10. 本地jar通过maven命令导到本地仓库里

    mvn install:install-file -Dfile=D:\repo\mybtais-generator-1.0.0.jar -DgroupId=mybatis.plugins -Darti ...