• 【bzoj4602】[Sdoi2016]齿轮


    dfs,连边,边权为比值,赋值搜索,遇到矛盾时退出

    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
     
    typedef long long LL;
    typedef double DB;
     
    #define eps 1e-8
    #define M 10010
    #define N 1010
     
    struct edge
    {
        int to,next;
        DB a;
    }e[M<<1];
    int head[M<<1];
    int cnt;
     
    int T,n,m;
    int yjy;
     
    int x,y,u,v;
    int p[N<<1];
     
    DB f[M<<1];
     
    void link(int u,int v,DB x)
    {
        e[++cnt]=(edge){v,head[u],x};
        head[u]=cnt;
    }
     
    int dfs(int x)
    {
        p[x]=1;
        for (int i=head[x];i!=-1;i=e[i].next)
        {
            int t=e[i].to;
            if (p[t]==0)
            {
                f[t]=f[x]*e[i].a;
                if (!dfs(t))
                    return 0;
            }
            else if ((f[x]*e[i].a-f[t])>eps)
                return 0;
        }
        return 1;
    }
     
    int main()
    {
        scanf("%d",&T);
        while (T--)
        {
            cnt=0;
            scanf("%d%d",&n,&m);
            for (int i=1;i<=n;i++)
                head[i]=-1,p[i]=0,f[i]=0;
            for (int i=1;i<=m;i++)
            {
                scanf("%d%d%d%d",&u,&v,&x,&y);
                link(v,u,1.0*x/y);          
                link(u,v,1.0*y/x);
            }
            bool flag=false;
            for (int i=1;i<=n;i++)
                if (!p[i])
                {
                    f[i]=1.0;
                    if (!dfs(i))
                    {
                        flag=true;
                        break ;
                    }
                }
            printf("Case #%d: ",++yjy);
            if (!flag)
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    汉语-词语-从容:百科
    汉语-词语-伶俜:百科
    汉语-词语-心迹:百科
    汉语-词语-痛楚:百科
    汉语-词语-痛苦:百科
    汉语-词语:散步
    汉语-词语-憎恨:百科
    2455 繁忙的都市
    P2820 局域网
    NOIP2013Day1T3 表示只能过一个点
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5547395.html
Copyright © 2020-2023  润新知