zoukankan      html  css  js  c++  java
  • BZOJ4602 Sdoi2016 齿轮 【带权并查集】*

    BZOJ4602 Sdoi2016 齿轮


    Description

    现有一个传动系统,包含了N个组合齿轮和M个链条。每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y。即如果只考虑这两个组合齿轮,编号为u的齿轮转动x圈,编号为v的齿轮会转动y圈。传动比为正表示若编号为u的齿轮顺时针转动,则编号为v的齿轮也顺时针转动。传动比为负表示若编号为u的齿轮顺时针转动,则编号为v的齿轮会逆时针转动。若不同链条的传动比不相容,则有些齿轮无法转动。我们希望知道,系统中的这N个组合齿
    轮能否同时转动。

    Input

    有多组数据,第一行给定整数T,表示总的数据组数,之后依次给出T组数据。每一组数据的第一行给定整数N和M,表示齿轮总数和链条总数。之后有M行,依次描述了每一个链条,其中每一行给定四个整数u,v,x和y,表示只考虑这一组联动关系的情况下,编号为u的齿轮转动x圈,编号为v的齿轮会转动y圈。请注意,x为正整数,而y为非零整数,但是y有可能为负数。
    T<=32,N<=1000,M<=10000且x与y的绝对值均不超过100

    Output

    输出T行,对应每一组数据。首先应该输出标识这是第几组数据,参见样例输出。之后输出判定结果,如果N个组合
    齿轮可以同时正常运行,则输出Yes,否则输出No。

    Sample Input

    2
    3 3
    1 2 3 5
    2 3 5 -7
    1 3 3 -7
    3 3
    1 2 3 5
    2 3 5 -7
    1 3 3 7

    Sample Output

    Case #1: Yes
    Case #2: No


    思路就是带权并查集
    因为必须满足任意一个环上的比值相乘为1
    所以就可以用带权并查集维护了


    需要注意的是在合并两个节点u,v的时候
    fa[fau]=fav
    dis[fau]=dis[v]/dis[u]∗x/y
    需要满足上面两个式子,主要是为了抵消方向和多余比例的影响


    #include<bits/stdc++.h>
    using namespace std;
    #define N 10010
    #define eps 1e-3
    int fa[N];double dis[N];
    int n,m;
    void init(){for(int i=1;i<=n;i++)fa[i]=i,dis[i]=1.0;}
    bool euq(double x){return abs(x-1)<=eps;}
    int find(int x){
      if(x==fa[x])return x;
      int fax=fa[x];
      fa[x]=find(fax);
      dis[x]*=dis[fax];
      return fa[x];
    }
    int main(){
      int T;scanf("%d",&T);
      for(int t=1;t<=T;t++){
        scanf("%d%d",&n,&m);
        init();
        bool can=1;
        for(int i=1;i<=m;i++){
          int u,v;double x,y;
          scanf("%d%d%lf%lf",&u,&v,&x,&y);
          int fau=find(u);
          int fav=find(v);
          if(fau==fav){
            if(!euq(dis[u]/dis[v]/x*y)){
              can=0;
              break;
            }
          }else{
            fa[fau]=fav;
            dis[fau]=dis[v]/dis[u]*x/y;
          }
        }
        printf("Case #%d: ",t);
        printf((can)?"Yes
    ":"No
    ");
      }
      return 0;
    }
  • 相关阅读:
    android如何播放资源文件夹raw中的视频
    android studio添加三方jar包
    golang自动导入postgresql脚本
    xorm使用pgsql的例子
    python安装psycopg2
    制作u盘启动的工具
    codis须知
    redis3.0自带集群配置
    keepalive配置db层的ha的一些注意点
    phalcon安装笔记
  • 原文地址:https://www.cnblogs.com/dream-maker-yk/p/9676258.html
Copyright © 2011-2022 走看看