zoukankan      html  css  js  c++  java
  • bzoj1092

    题解:

    按照时间枚举一下那些点有水

    然后用物理方案来计算

    代码:

    #include<bits/stdc++.h>
    const int N=25,M=110;
    int n,m,x,y,z,i,A,B,T,g[N],v[M],w[M],nxt[M],ed;
    struct P
    {
        int x,y,h,v;
    }a[N];
    int getid(int x)
    {    
        for (int i=1;i<=n;i++)
         if (a[i].x==x)return i;
    }
    void add(int x,int y,int z)
    {
         v[++ed]=y;w[ed]=z;nxt[ed]=g[x];g[x]=ed;
          v[++ed]=x;w[ed]=z;nxt[ed]=g[y];g[y]=ed;
    }
    int main()
    {
        scanf("%d",&n);
         for (int i=1;i<=n;i++)
         {
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].h);
            a[i].h+=a[i].y;
            a[i].v=i==1;
         }
          scanf("%d",&m);
          while (m--)
         {
             scanf("%d%d%d",&x,&y,&z);
            add(getid(x-1),getid(x+z),y);
         }
          scanf("%d%d",&A,&B);
         while (1)
         {
            for (x=1;x;)
             for (x=0,i=1;i<=n;i++)
              if (a[i].v)
                 for (int j=g[i];j;j=nxt[j])
                if (a[i].h<=w[j]&&!a[v[j]].v)a[v[j]].v=x=1;
            for (m=0,i=1;i<=n;i++)
             if (a[i].v&&a[i].h>m)m=a[i].h;
            if (a[A].v&&m==B)
             {
                 printf("%d",T);
                return 0;
             }
            for (int i=1;i<=n;i++)
             if (a[i].v&&a[i].y==a[i].h&&a[i].y==m)
              {
                  puts("-1");
                  return 0;
              }
            for (int i=1;i<=n;i++)
             if (a[i].v&&a[i].h==m)a[i].h--,T++;
           }
    }
  • 相关阅读:
    haproxy常用配置
    分区命令(大于2TB的分区)
    css基础-2 div布局
    css基础-1
    2.HTML5基本标签
    1.HTML基本结构、头部、注释
    AWK数组
    nginx rewrite 基础
    nginx location详解
    Linux命令练习.ziw
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8458897.html
Copyright © 2011-2022 走看看