这道题就是一个DFS,有一篇奶牛题几乎一样。但是这道题卡精度。

这道题网上的另一篇题解是有问题的。取对数这种方法可以被轻松卡。比如1e18 与 (1e9-1)*(1e9+1)取对数根本无法保证不被卡精度。所以我们需要换一个方法。

我们取一个大质数,在这个质数的模意义下进行运算:乘法是乘法,除法变成乘逆元,负数加一个质数。这种方法虽然可能冲突,但是与数据无关。

#include<cstdio>
using namespace std ; struct edge {
int p ;
int a ;
int b ;
edge * next ;
} ; const int p = ; int pow ( int a , int n ) {
int ans = ;
while ( n ) {
if ( n & ) ans *= a , ans %= p ;
a *= a ; a %= p ;
n /= ;
}
return ans ;
} int inv ( const int a ) {
return pow ( a , p - ) ;
} const int MAXN = ;
const int MAXM = ;
int N , M ;
edge E [ MAXM * ] ;
edge * V [ MAXN ] ;
bool vis [ MAXN ] ;
int dis [ MAXN ] ; void read () {
scanf ( "%d%d" , & N , & M ) ;
for ( int i = ; i <= N ; ++ i ) vis [ i ] = V [ i ] = ;
while ( M -- ) {
int s , t , a , b ;
scanf ( "%d%d%d%d" , & s , & t , & a , & b ) ;
edge * const t1= & E [ M * ] ;
t1 -> p = t ;
t1 -> a = a ;
t1-> b = b < ? b + p : b ;
t1-> next = V [ s ] ;
V [ s ] = t1 ;
edge * const f = & E [ M * + ] ;
f -> p = s ;
f -> a = b < ? b + p : b ;
f -> b = a ;
f -> next = V [ t ] ;
V [ t ] = f ;
}
} bool dfs ( const int o ) {
vis [ o ] = true ;
for ( edge * v = V [ o ] ; v ; v = v -> next )
if ( ! vis [ v -> p ] ) {
dis [ v -> p ] = dis [ o ] * v -> a % p * inv ( v -> b ) % p ;
if ( ! dfs ( v -> p ) ) return false ;
} else
if ( dis [ v -> p ] != dis [ o ] * v -> a % p * inv ( v -> b ) % p )
return false ;
return true ;
} bool solve () {
for ( int i = ; i <= N ; ++ i )
if ( ! vis [ i ] && ( dis [ i ] = , ! dfs ( i ) ) ) return false ;
return true ;
} int main () {
int T ;
scanf ( "%d" , & T ) ;
for ( int i = ; i <= T ; ++ i ) {
read () ;
printf ( "Case #%d: " , i ) ;
puts ( solve () ? "Yes" : "No" ) ;
}
return ;
}

BZOJ4602: [Sdoi2016]齿轮 DFS 逆元的更多相关文章

  1. [bzoj4602][Sdoi2016]齿轮——dfs

    题目 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合齿轮,编号为u的齿轮转动x圈,编号为v的齿轮会转动y圈.传 ...

  2. BZOJ4602 Sdoi2016 齿轮 【带权并查集】*

    BZOJ4602 Sdoi2016 齿轮 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组 ...

  3. BZOJ 4602: [Sdoi2016]齿轮 dfs

    4602: [Sdoi2016]齿轮 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4602 Description 现有一个传动系统,包 ...

  4. BZOJ4602 SDOI2016齿轮(搜索)

    dfs一遍给每个齿轮随便标个值看是否矛盾就行了. #include<iostream> #include<cstdio> #include<cmath> #incl ...

  5. bzoj4602 [Sdoi2016]齿轮

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4602 [题解] 对于每组齿轮(u, v)连边,权值为y/x(反向边x/y) 那么直接dfs计 ...

  6. BZOJ4602:[SDOI2016]齿轮(并查集)

    Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x  : y.即如果只考虑这两个组合齿轮,编号为u的齿轮转动x圈,编号为v ...

  7. BZOJ4602: [Sdoi2016]齿轮(并查集 启发式合并)

    题意 题目链接 Sol 和cc的一道题很像啊 对于初始的\(N\)个点,每加一条限制实际上就是合并了两个联通块. 那么我们预处理出\(val[i]\)表示的是\(i\)节点所在的联通块根节点转了\(1 ...

  8. [Sdoi2016]齿轮

    4602: [Sdoi2016]齿轮 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 613  Solved: 324 [Submit][Status ...

  9. bzoj 4602: [Sdoi2016]齿轮

    4602: [Sdoi2016]齿轮 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x  : y.即如果只考虑这两个组合 ...

随机推荐

  1. 配置vue-devtools调试工具

    1. 通过 Git 克隆项目到本地 git clone https://github.com/vuejs/vue-devtools.git 2. Git 进入到 vue-devtools 所在目录,然 ...

  2. FROM_UNIXTIME

    FROM_UNIXTIME 格式化MYSQL时间戳函数   函数:FROM_UNIXTIME作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示.语法 ...

  3. windows和Ubuntu下安装mongodb

    windows 下载 mongodb官网下载压缩版安装包:下载地址:https://www.mongodb.com/download-center/community 注意选择版本(目前windows ...

  4. 一步一步学Linq to sql(六):探究特性

    延迟执行 IQueryable query = from c in ctx.Customers select c; 这样的查询句法不会导致语句立即执行,它仅仅是一个描述,对应一个SQL.仅仅在需要使用 ...

  5. SpringCloud项目,接口调用返回http 500 - Internal Server Error的错误

    今天上班的时候,自己正在参与的Spring Cloud项目出现了问题,原本上周五还正常的项目突然所有接口调用都是返回http 500的错误. 项目的状态是在Eureka上可以看到对应微服务是在线状态, ...

  6. 如何在Centos7下升级Apache至最新版本

    Apache是使用最广泛的应用部署软件.并且它也是所有服务器的必要组成部分.安装最新版本的apache意味着拥有更多最新的功能和修复了已知的BUG. 介绍 在这篇教程里面,我将会介绍在Centos7下 ...

  7. nginx https ssl 配置

    #设置https 访问server { listen ; server_name www.xxx.com; access_log xxx/xxx/xxx.log combined; index ind ...

  8. Remote X11 GUI for Linux/Unix

    摘自:https://www.redwireservices.com/remote-x11-for-linux-unix The Problem One of my most feared quest ...

  9. 【廖雪峰老师python教程】——装饰器

    装饰器 # 一个函数装饰器的列子 def log(func): def wrapper(*args,**kwargs): print('Name=%s'%func.__name__) return f ...

  10. ProxySQL初体验

      Preface       As we all know,it's a common sense that separate reading and writing operations can ...