这道题就是一个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. 【shell脚本学习-2】

    #!/bin/bash - #echo do you have exetuate this project \n printf "please input your passwd" ...

  2. MIP缓存加速原理 MIP不仅仅只是CDN

    什么是MIP?我想我们现在都知道.可是你真的了解MIP吗?MIP加速原理是什么?MIP 是用 CDN 做加速的么?准确答案是:是,但不只是. 很多人并认为MIP百度排名会靠前,甚至权重会提高?作为一个 ...

  3. CopyArrays

    import java.util.Arrays; public class CopyArrays { public static void main(String args[]) { int []a ...

  4. python基础之socket套接字基础part2

    基于UDP的socket 面向无连接的不可靠数据传输,可以没有服务器端,只不过没有服务器端,发送的数据会被直接丢弃,并不能到达服务器端 1 #客户端 2 import socket 3 ip_port ...

  5. windows 系统禁止使用 U 盘的方法

    windows 系统禁止使用 U 盘的方法 最简单的办法: 注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentCntrolSet\Services\USBSTOR] 将名为 ...

  6. Java重写构造方法

    public class TestSuper { public static void main(String[] args) { new ChildClass("alex", 1 ...

  7. java网络编程框架

    虽然写过一些网络编程方面的东西,但还没有深入研究过这方面的内容,直接摘录一些文章,后续整理 原文地址:http://blog.csdn.net/lwuit/article/details/730613 ...

  8. Python 3基础教程18-获取用户键盘输入

    有时候,我们需要获取用户的键盘输入的信息,然后得到信息,拿去做一些事情. 请看下面的demo.py # 练习如何通过键盘获取用户输入 x = input('What is your name?') p ...

  9. weblogic中配置自定义filter和servlet

    情景:最近公司产品要接入其它厂商的单点服务器,本来我是在Tomcat上进行测试,使用的是spring boot 的注解方式@webFilter和@webServlet注解写过滤器和servlet类,启 ...

  10. Mysql字符串截取:Left()、Right()、Substring()、Substring_index()

    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些, mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结: ...