[cf1515G]Phoenix and Odometers
显然这条路径只能在$v_{i}$所在的强连通分量内部,不妨仅考虑这个强连通分量
对这个强连通分量dfs,得到一棵外向树(不妨以1为根)
考虑一条边$(u,v,l)$,由于强连通,总存在一条从$v$到$u$的路径,经过这条路径$t_{i}$次,再经过$u$到$v$这条边$t_{i}-1$次,即从$v$到达了$u$,且总边权$\equiv -l(mod\ t_{i})$
由此,不妨将$(v,u,-l)$也作为一条边加入图中,显然不影响(以下称这条边为$(u,v,l)$的反向边)
此时,令$dep_{x}$为1通过树边走到$x$的权值和,那么从$x$到$y$通过树边及其反向边的最短路,权值和即
$$
(dep_{lca(x,y)}-dep_{x})+(dep_{y}-dep_{lca(x,y)})=dep_{y}-dep_{x}
$$
显然若没有非树边,从$x$到$y$的任意一条路径(之前仅考虑最短路)权值和都为$dep_{y}-dep_{x}$(显然每一条边都是最短路,前后项相消即可)
考虑非树边$(u,v,l)$,若从$x$到$y$的路径每经过一次$(u,v,l)$,实际上即让边权和加$l-(dep_{v}-dep_{u})$,最后统计所有非树边的贡献和即为总边权和
另一方面,我们显然可以经过每一条非树边任意次
由此,对每一条非树边$(u,v,l)$求出$l-(dep_{v}-dep_{u})$,假设依次为$a_{1},a_{2},...,a_{s}$,问题即判定是否存在一组解$x_{i}\in N$,使得$\sum_{j=1}^{s}x_{j}a_{j}\equiv -s_{i}(mod\ t_{i})$
根据数论知识,这显然等价于$\gcd(\gcd_{i=1}^{s}a_{i},t_{i})\mid s_{i}$,判定即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define ll long long
5 struct Edge{
6 int nex,to,len;
7 }edge[N<<1];
8 int E,n,m,q,x,y,z,scc,head[N],head_rev[N],dfn[N],vis[N],bl[N];
9 ll dep[N],ans[N];
10 ll gcd(ll x,ll y){
11 if (!y)return x;
12 return gcd(y,x%y);
13 }
14 void add(int x,int y,int z){
15 edge[E].nex=head[x];
16 edge[E].to=y;
17 edge[E].len=z;
18 head[x]=E++;
19 }
20 void add_rev(int x,int y,int z){
21 edge[E].nex=head_rev[x];
22 edge[E].to=y;
23 edge[E].len=z;
24 head_rev[x]=E++;
25 }
26 void dfs1(int k){
27 if (vis[k])return;
28 vis[k]=1;
29 for(int i=head[k];i!=-1;i=edge[i].nex)dfs1(edge[i].to);
30 dfn[++dfn[0]]=k;
31 }
32 void dfs2(int k,ll s){
33 if (bl[k])return;
34 bl[k]=scc;
35 dep[k]=s;
36 for(int i=head_rev[k];i!=-1;i=edge[i].nex)dfs2(edge[i].to,s+edge[i].len);
37 }
38 int main(){
39 scanf("%d%d",&n,&m);
40 memset(head,-1,sizeof(head));
41 memset(head_rev,-1,sizeof(head_rev));
42 for(int i=1;i<=m;i++){
43 scanf("%d%d%d",&x,&y,&z);
44 add(x,y,z);
45 add_rev(y,x,z);
46 }
47 for(int i=1;i<=n;i++)
48 if (!vis[i])dfs1(i);
49 for(int i=n;i;i--)
50 if (!bl[dfn[i]]){
51 scc++;
52 dfs2(dfn[i],0);
53 }
54 for(int x=1;x<=n;x++)
55 for(int j=head[x];j!=-1;j=edge[j].nex){
56 y=edge[j].to,z=edge[j].len;
57 if (bl[x]==bl[y])ans[bl[x]]=gcd(ans[bl[x]],z-(dep[x]-dep[y]));
58 }
59 scanf("%d",&q);
60 for(int i=1;i<=q;i++){
61 scanf("%d%d%d",&x,&y,&z);
62 if (y%gcd(ans[bl[x]],z)==0)printf("YES\n");
63 else printf("NO\n");
64 }
65 }
[cf1515G]Phoenix and Odometers的更多相关文章
- Phoenix综述(史上最全Phoenix中文文档)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...
- 在DBeaver中phoenix查询报错:org.apache.phoenix.exception.PhoenixIOException: The system cannot find the path specified
环境:Phoenix:4.4,win7系统 问题:Phoenix在查询hbase时,报"系统找不到指定路径". 解决: 请参见 https://distcp.quora.com/C ...
- HBase+Phoenix整合入门--集群搭建
环境:CentOS 6.6 64位 hbase 1.1.15 phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...
- SQL Server恢复软件 Stellar Phoenix sql recovery
SQL Server恢复软件 Stellar Phoenix sql recovery http://www.stellarinfo.com/ http://www.stellarinfo.com/ ...
- Hbase+ Phoenix搭建教程
Hbase+ Phoenix搭建教程 一.Hbase简介 HBase是基于列存储.构建在HDFS上的分布式存储系统,其主要功能是存储海量结构化数据. HBase构建在HDFS之上,因此HBase也是通 ...
- CDH5.4.5运行Phoenix导入CSV文件
1.安装phoenix 在界面上设置Phoenix的parcel包: http://52.11.56.155:7180/cmf/settings?groupKey=config.scm.parcel. ...
- Phoenix -修复表索引
索引的修复可以通过2种方式,(关于pehoenix的索引的生命周期可以参考 https://community.hortonworks.com/articles/58818/phoenix-inde ...
- phoenix将hdfs数据导入hbase
http://phoenix.apache.org/bulk_dataload.html
- phoenix 开发API系列 目录
phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...
随机推荐
- SphereEx 公司成立,推动 Apache ShardingSphere 社区加速发展
近日,SphereEx 商业公司在中国红杉种子基金及初心资本助力下,已完成公司及团队组建.各大媒体平台及公众号已相继报道,并抢占新闻头条.作为以 Apache ShardingSphere 核心团队组 ...
- Java领域的表现层的三种技术--jsp、freemarker、velocity
10月份忙碌的参加秋招并获得了5个成都.上海.广州等不同地区的工作offer,最终选择了广州,11月底来到公司实习,很快,就跟进了公司的项目了,原本以为可以和宣讲会时报的志愿一样--Java开发,但是 ...
- Mac录屏同时录制系统声音和画外音(Soundflower无法安装解决方案)
个人博客地址:xzajyjs.cn 前言 以前一直有录屏的需求,但苦于自带的QuickTime 无法录制内屏声音,一直使用的是第三方的app.近期开腾讯会议需要录屏,但主持人本身没有开启录屏权限,只好 ...
- 将DataFrame赋值为可变变量在spark中多次赋值后运行速度减慢的问题
该问题先标记上,之后有空了研究原因. 在var dataframe后将dataframe作为参数输入某方法,将结果重新赋予该dataframe,会导致spark运行显著减慢速度.暂时不知道原因,之后研 ...
- 【数据结构与算法Python版学习笔记】树——树的遍历 Tree Traversals
遍历方式 前序遍历 在前序遍历中,先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树. 中序遍历 在中序遍历中,先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树. 后序遍 ...
- [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎
[源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 目录 [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 0x00 摘要 0x01 前文回顾 1.1 训 ...
- VUE调用子窗口弹窗或组件弹窗,关闭弹窗刷新父级页面主页面,通过this.$emit来实现
this.$emit是父级向自己传值 第一步在父级页面创建自己页面的引用 <template> <div> <edit ref="edit" @ref ...
- stm32中的串口通信你了解多少
在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...
- Spring Cloud Alibaba 使用Nacos作为配置管理中心
为什么需要配置中心? 动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署 ...
- kail入侵win2003 sp2 中文版系统
攻击机:kail -- IP:192.168.74.132 目标靶机:win2003 sp2 中文版系统-- IP:192.168.74.128 一.扫描漏洞 1. 在kail中运行 namp 192 ...