bzoj4602 [Sdoi2016]齿轮
2024-09-04 14:21:09
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4602
【题解】
对于每组齿轮(u, v)连边,权值为y/x(反向边x/y)
那么直接dfs计算一遍即可。
# include <math.h>
# include <stdio.h>
# include <string.h>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = 5e5 + ;
const int mod = 1e9+; # define RG register
# define ST static int T, n, m;
int head[M], nxt[M], to[M], tot;
ld w[M];
inline void add(int u, int v, ld _w) {
++tot; nxt[tot] = head[u];
head[u] = tot; to[tot] = v; w[tot] = _w;
} bool vis[M];
ld v[M]; inline bool dfs(int x, ld c) {
v[x] = c; vis[x] = ;
for (int i=head[x]; i; i=nxt[i]) {
if(!vis[to[i]]) {
if(dfs(to[i], c*w[i])) return ;
} else {
if(fabs(v[to[i]]-c*w[i]) > 1e-) return ;
}
}
return ;
}
inline void sol() {
memset(head, , sizeof head);
tot = ;
scanf("%d%d", &n, &m);
for (int i=; i<=m; ++i) {
int u, v, x, y; scanf("%d%d%d%d", &u, &v, &x, &y);
add(u, v, (ld)y/x);
add(v, u, (ld)x/y);
}
memset(vis, , sizeof vis);
for (int i=; i<=n; ++i) {
if(vis[i]) continue;
if(dfs(i, )) {
puts("No");
return;
}
}
puts("Yes");
} int main() {
int T; scanf("%d", &T);
for (int i=; i<=T; ++i) {
printf("Case #%d: ", i);
sol();
}
return ;
}
最新文章
- python27(32位)安装RTree
- 一道题看bitset应用 --ZOJ 3642
- javac编译提示编码GBK的不可映射字符
- sass中出现的中文问题
- EXCEL,熟悉又不熟悉的项目管理工具
- Eclipse maven git
- -fembed-bitcode is not supported on versions of iOS prior to 6.0
- JAVA的节点流和处理流
- MySQL的存储引擎与日志说明
- 【BZOJ1084】最大子矩阵(动态规划)
- ACM-自学之旅
- history.pushState()和history.replaceState()
- day43 mysql 基本管理,[破解密码以及用户权限设置]以及慢日志查询配置
- MES方向准备
- Maven多模块项目
- SET FMTONLY ON
- 003_cd pushd popd三个命令的区别
- MVVM模式下关闭窗口的实现
- 网络攻防大作业——用python实现wifi破解
- angular controller 之间的通信方式