zoukankan      html  css  js  c++  java
  • 1291. Gearwheels 夜

    http://acm.timus.ru/problem.aspx?space=1&num=1291

    dfs 遍历树的节点 根据齿轮数量的比 求得转速 注意用 gcd 化减

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<set>
    #include<queue>
    #include<stack>
    #include<map>
    #include<string>
    #include<iomanip>
    using namespace std;
    
    #define LL long long
    const int INF=0x3f3f3f3f;
    const int N=1005;
    int head[N],I;
    struct node
    {
        int j,next;
    }side[N*2];
    bool visited[N];
    int a[N];
    int numerator[N];
    int denominator[N];
    void add(int i,int j)
    {
        side[I].j=j;
        side[I].next=head[i];
        head[i]=I++;
    }
    int gcd(int x,int y)
    {
        if(x%y==0)
        return y;
        return gcd(y,x%y);
    }
    void Fans(int x,int y)
    {
        numerator[y]=-numerator[x]*a[x];
        denominator[y]=denominator[x]*a[y];
        int k=gcd(abs(numerator[y]),abs(denominator[y]));
        numerator[y]/=k;
        denominator[y]/=k;
    }
    void dfs(int x)
    {
        visited[x]=true;
        for(int t=head[x];t!=-1;t=side[t].next)
        {
            int l=side[t].j;
            if(visited[l])
            continue;
            Fans(x,l);
            dfs(l);
        }
    }
    int main()
    {
        //freopen("data.in","r",stdin);
        int n;
        while(cin>>n)
        {
            memset(head,-1,sizeof(head));
            I=0;
            for(int i=1;i<=n;++i)
            {
                cin>>a[i];
                int k;
                while(cin>>k)
                {
                    if(!k)
                    break;
                    add(i,k);
                }
            }
            for(int i=1;i<=n;++i)
            {
                numerator[i]=0;
                denominator[i]=1;
            }
            int s,v;
            cin>>s>>v;
            numerator[s]=v;
            memset(visited,false,sizeof(visited));
            dfs(s);
            for(int i=1;i<=n;++i)
            cout<<numerator[i]<<"/"<<denominator[i]<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    68
    56
    Django manager 命令笔记
    Django 执行 manage 命令方式
    Django 连接 Mysql (8.0.16) 失败
    Python django 安装 mysqlclient 失败
    H.264 SODB RBSP EBSP的区别
    FFmpeg—— Bitstream Filters 作用
    MySQL 远程连接问题 (Windows Server)
    MySQL 笔记
  • 原文地址:https://www.cnblogs.com/liulangye/p/2772940.html
Copyright © 2011-2022 走看看