BZOJ 4602 [Sdoi2016]齿轮
来源:互联网 发布:自动复制粘贴软件 编辑:程序博客网 时间:2024/04/29 19:47
爆搜+取对数优化
很显然我们可以定一个点,然后DFS下去看有没有矛盾。但是这样会炸精度。于是考虑判断a*b==a*c可以转为判断log(a*b)==log(a*c)也就是log(a)+log(b)==log(a)+log(c)。这样精度就安全了。
#include<cstdio>#include<cmath>#include<cstring>#define N 1005#define M 10005using namespace std;struct edge{int next,to;double v;bool cir;}e[M<<1];const double eps = 1e-8;double f[N];int last[N], ecnt;bool flag, vis[N], cir[N];void add(int a, int b, double v, bool c){ e[++ecnt]=(edge){last[a],b,v,c}; last[a]=ecnt;}void clear(){ ecnt=0; memset(last,0,sizeof(last)); memset(vis,0,sizeof(vis));}void dfs(int x, double sum, bool c){ vis[x]=1; f[x]=sum; cir[x]=c; for(int i = last[x]; i; i=e[i].next) { int y=e[i].to; if(vis[y]) { if(cir[y]!=(c^e[i].cir) || abs(sum+e[i].v-f[y])>eps) { flag=0; return; } } else { dfs(y,sum+e[i].v,c^e[i].cir); if(!flag)return; } }}int main(){ int T; scanf("%d",&T); for(int t = 1; t <= T; t++) { clear(); int n, m; scanf("%d%d",&n,&m); for(int i = 1; i <= m; i++) { int u, v; double x, y; scanf("%d%d%lf%lf",&u,&v,&x,&y); add(u,v,log(abs(y/x)),y<0); add(v,u,log(abs(x/y)),y<0); } flag=1; for(int i = 1; i <= n && flag; i++) if(!vis[i]) dfs(i,0,0); if(flag)printf("Case #%d: Yes\n",t); else printf("Case #%d: No\n",t); }}
0 0
- bzoj 4602: [Sdoi2016]齿轮
- BZOJ 4602 [Sdoi2016]齿轮
- [dfs] BZOJ 4602 [Sdoi2016]齿轮
- 4602: [Sdoi2016]齿轮
- bzoj 4602: [Sdoi2016]齿轮(加权并查集)
- BZOJ[4602] [Sdoi2016]齿轮 加权并查集
- BZOJ4602 [Sdoi2016]齿轮
- 【bzoj4602】【SDOI2016】【齿轮】【dfs】
- 【bzoj4602】[Sdoi2016]齿轮 dfs
- BZOJ4602: [Sdoi2016]齿轮
- bzoj4602 [Sdoi2016]齿轮
- bzoj4602: [Sdoi2016]齿轮
- BZOJ 4515 SDOI2016 游戏
- bzoj 4513: [Sdoi2016]储能表
- BZOJ 4515: [Sdoi2016]游戏
- BZOJ 4518: [Sdoi2016]征途
- BZOJ 4518: [Sdoi2016]征途
- BZOJ 4513 [Sdoi2016]储能表
- PyQt窗口最小化到托盘
- 一种将程序的标准输出重定向到telnet终端的方法
- 常青树和局外人:以色列前总统佩雷斯的双面人生
- javascript基础学习(1)数据类型--array
- Eval函数解决字符串JS在IE下不执行的问题
- BZOJ 4602 [Sdoi2016]齿轮
- 几种建模工具的比较
- MySQL系列第一篇:MySQL安装配置
- 自己动手搭建MVC之一
- 技术创业失败的7个教训
- Android Animation
- c++中<array>的使用
- URAL 1519 Formula 1 【插头DP模板题】
- YV12,I420,YUV420P的区别