zoukankan      html  css  js  c++  java
  • hdu 2647 (拓扑)

    点击打开链接


    分析:

    刚开始直接用模版WA了一次,后来想想才发现,可能有两个人(a和b)的工资没有要求a>b,所以这样就不能直接利用等差公式计算。。。



    WA:


    #include"stdio.h"
    #include"string.h"
    struct node
    {
        int num;//记录比他少的人的个数
        int cnt;//
        int date[20];//比他少的人的标号
    }A[10001];
    int topsort(int n)
    {
        int i,j,k,f;
        k=0;
        while(k<n)
        {
            f=0;
            for(i=1;i<=n;i++)
            {
                if(A[i].cnt==0)
                {
                    A[i].cnt--;
                    k++;
                    for(j=0;j<A[i].num;j++)
                    {
                        A[A[i].date[j]].cnt--;
                    }
                    f=1;
                    break;
                }
            }
            if(f==0)return 0;
        }
        return 1;
    }
    int main()
    {
        int n,m;
        int i,j;
        int a,b;
        while(scanf("%d%d",&n,&m)!=-1)
        {
            memset(A,0,sizeof(A));
            for(i=0;i<m;i++)
            {
                scanf("%d%d",&a,&b);
                A[a].date[A[a].num++]=b;
                A[b].cnt++;
            }
            int ans=topsort(n);
            if(ans==0)printf("-1\n");
            else printf("%d\n",n*(888*2+n-1)/2);
        }
        return 0;
    }


    AC:

    #include"stdio.h"
    #include"string.h"
    #define max(a,b) a>b?a:b;
    struct node
    {
        int ans;
        int num;//记录比他少的人的个数
        int cnt;//
        int date[20];//比他少的人的标号
    }A[10001];
    int topsort(int n)
    {
        int i,j,k,f,t;
        k=0;
        while(k<n)
        {
            f=0;
            for(i=1;i<=n;i++)
            {
                if(A[i].cnt==0)
                {
                    A[i].cnt--;
                    k++;
                    t=A[i].ans+1;
                    for(j=0;j<A[i].num;j++)
                    {
                        A[A[i].date[j]].cnt--;
                        A[A[i].date[j]].ans=max(A[A[i].date[j]].ans,t);
                    }
                    f=1;
                    break;
                }
            }
            if(f==0)return 0;
        }
        return 1;
    }
    int main()
    {
        int n,m;
        int i,j;
        int a,b;
        while(scanf("%d%d",&n,&m)!=-1)
        {
            memset(A,0,sizeof(A));
            for(i=0;i<m;i++)
            {
                scanf("%d%d",&a,&b);
                A[b].date[A[b].num++]=a;
                A[a].cnt++;
            }
            int ans=topsort(n);
            if(ans==0)printf("-1\n");
            else 
            {
                ans=0;
                for(i=1;i<=n;i++)
                    ans+=A[i].ans;
                ans+=888*n;
                printf("%d\n",ans);
            }
        }
        return 0;
    }


  • 相关阅读:
    django-替代为自定义的User model
    python *args 和 ** kwargs
    MySQL:性能优化
    MySQL:常用的数据模型
    MySQL:存储过程和函数
    MySQL:用户管理
    MySQL:索引
    MySQL:基础知识
    Linux:NFS配置
    Linux:Apache安装与启动
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3042308.html
Copyright © 2011-2022 走看看