zoukankan      html  css  js  c++  java
  • BZOJ1077 : [SCOI2008]天平

    首先通过差分约束系统建图,用Floyed算法求出任意两个砝码差值的上下界。

    然后暴力枚举放在右边的砝码C,D,通过与A,B差值的上下界分类讨论统计方案。

    时间复杂度$O(N^3)$。

    #include<cstdio>
    #define rep(i) for(i=0;i<=n+1;i++)
    const int N=55,inf=1000;
    int n,A,B,i,j,k,C,D,dx[N][N],dn[N][N],c1,c2,c3;char s[N][N];
    inline void umin(int&a,int b){if(a>b)a=b;}
    inline void umax(int&a,int b){if(a<b)a=b;}
    int main(){
      scanf("%d%d%d",&n,&A,&B);
      rep(i)rep(j)if(i!=j)dx[i][j]=inf*2;
      for(i=1;i<=n;i++)dx[i][0]=dx[n+1][i]=0;
      dx[0][n+1]=2,dx[n+1][0]=-2;
      for(i=1;i<=n;i++)for(scanf("%s",s[i]+1),j=1;j<=n;j++){
        if(s[i][j]=='-')dx[j][i]=-1;
        if(s[i][j]=='=')dx[i][j]=0;
      }
      rep(k)rep(i)rep(j)umin(dx[i][j],dx[i][k]+dx[k][j]);
      rep(i)rep(j)if(i!=j)dn[i][j]=-inf*2;
      for(i=1;i<=n;i++)dn[0][i]=dn[i][n+1]=0;
      dn[0][n+1]=2,dn[n+1][0]=-2;
      for(i=1;i<=n;i++)for(j=1;j<=n;j++){
        if(s[i][j]=='-')dn[i][j]=1;
        if(s[i][j]=='=')dn[i][j]=0;
      }
      rep(k)rep(i)rep(j)umax(dn[i][j],dn[i][k]+dn[k][j]);
      for(C=1;C<=n;C++)if(C!=A&&C!=B)for(D=1;D<C;D++)if(D!=A&&D!=B){
        if(dn[C][A]>dx[B][D]||dn[D][A]>dx[B][C])c1++;
        if((dn[C][A]==dx[C][A]&&dn[B][D]==dx[B][D]&&dn[C][A]==dn[B][D])||
           (dn[D][A]==dx[D][A]&&dn[B][C]==dx[B][C]&&dn[D][A]==dn[B][C]))c2++;
        if(dx[C][A]<dn[B][D]||dx[D][A]<dn[B][C])c3++;
      }
      return printf("%d %d %d",c1,c2,c3),0;
    }
    

      

  • 相关阅读:
    BZOJ 3144 [Hnoi2013]切糕
    一场比赛:20170707
    BZOJ 2815 [ZJOI2012]灾难
    BZOJ 1088 [SCOI2005]扫雷Mine
    BZOJ 1052 [HAOI2007]覆盖问题
    BZOJ 3505 [Cqoi2014]数三角形
    BZOJ 2957 楼房重建
    BZOJ 2654 tree
    丁酉年六月十一ACM模拟赛
    BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑
  • 原文地址:https://www.cnblogs.com/clrs97/p/4972156.html
Copyright © 2011-2022 走看看