BZOJ4602: [Sdoi2016]齿轮 DFS 逆元
这道题就是一个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 逆元的更多相关文章
- [bzoj4602][Sdoi2016]齿轮——dfs
题目 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合齿轮,编号为u的齿轮转动x圈,编号为v的齿轮会转动y圈.传 ...
- BZOJ4602 Sdoi2016 齿轮 【带权并查集】*
BZOJ4602 Sdoi2016 齿轮 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组 ...
- BZOJ 4602: [Sdoi2016]齿轮 dfs
4602: [Sdoi2016]齿轮 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4602 Description 现有一个传动系统,包 ...
- BZOJ4602 SDOI2016齿轮(搜索)
dfs一遍给每个齿轮随便标个值看是否矛盾就行了. #include<iostream> #include<cstdio> #include<cmath> #incl ...
- bzoj4602 [Sdoi2016]齿轮
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4602 [题解] 对于每组齿轮(u, v)连边,权值为y/x(反向边x/y) 那么直接dfs计 ...
- BZOJ4602:[SDOI2016]齿轮(并查集)
Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合齿轮,编号为u的齿轮转动x圈,编号为v ...
- BZOJ4602: [Sdoi2016]齿轮(并查集 启发式合并)
题意 题目链接 Sol 和cc的一道题很像啊 对于初始的\(N\)个点,每加一条限制实际上就是合并了两个联通块. 那么我们预处理出\(val[i]\)表示的是\(i\)节点所在的联通块根节点转了\(1 ...
- [Sdoi2016]齿轮
4602: [Sdoi2016]齿轮 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 613 Solved: 324 [Submit][Status ...
- bzoj 4602: [Sdoi2016]齿轮
4602: [Sdoi2016]齿轮 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合 ...
随机推荐
- thinkphp phpmailer邮箱验证
thinkphp 关于phpmailer的邮箱验证 一 . 登陆自己的邮箱,例如:qq邮箱.登陆qq邮箱在账户设置中开启smtp服务: 之后回发送一个授权码 , 这个授权码先保存下来,这个授权码在后 ...
- 【GUI】一、Swing外观框架BeautyEye使用
一.Swing外观框架BeautyEye使用 1.1 导包 BeautyEye.jar 1.2 使用BeautyEye L&F public static void main(String[] ...
- Unicode控制字符
Unicode控制字符就是特殊的Unicode字符 控制字符转义代码对照表 Unicode-控制字符 LRM RLM ZWJ ZWNJ LRE LRO RLO PDF NADS ...
- mongodb常用命令学习笔记
mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...
- 生産管理(PP)
伝票系 製造指図 マスタ系 生産資源/治工具 作業区 能力 作業手順 作業バージョン 作業記録 需要予測プロファイル 計画手配 MRP レシピ その他 カスタマイズ系 BOM関連 製造指図確認 伝票系 ...
- c/c++ 数组传参
在c/c++中,在进行数组传参时,数组的元素个数默认是不作为实参传入调用函数,也就是说c/c++ 不允许向函数传递一个完整的数组作为参数 实例: 1.形式参数是一个指针,实参包括数组长度: 1 voi ...
- LeetCode:11. ContainerWithWater(Medium)
原题链接:https://leetcode.com/problems/container-with-most-water/description/ 题目要求:给定n个非负整数a1,a2,...,an ...
- 用ServiceStack操作使用redis的问题
最近在学习Redis,查阅网上很多资料后使用SericeStack连接redis.在nuget中下载ServiceStack.Redis,主要使用到四个dll 但是运行之后会出现一堆奇怪问题:没有实现 ...
- netty学习记录2
昨天晚上在看到7.2章MessagePack编码器和解码器开发这一章时,书里面没有贴出全部的代码,然后我按照我自己的想法把代码补全后,发现死活没有把代码跑通. 然后花了挺多时间在网上找,很多博客都贴出 ...
- SSM框架学习思维导图
SSM框架学习思维导图 2017年08月11日 20:17:28 阅读数:1141 放上前段时间学习SSM框架以及Spring.SpringMVC.MyBatis的学习结果,输出思维导图一共四幅图.这 ...