题解:

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

然后用物理方案来计算

代码:

#include<bits/stdc++.h>
const int N=,M=;
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=;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=;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==;
}
scanf("%d",&m);
while (m--)
{
scanf("%d%d%d",&x,&y,&z);
add(getid(x-),getid(x+z),y);
}
scanf("%d%d",&A,&B);
while ()
{
for (x=;x;)
for (x=,i=;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=;
for (m=,i=;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 ;
}
for (int i=;i<=n;i++)
if (a[i].v&&a[i].y==a[i].h&&a[i].y==m)
{
puts("-1");
return ;
}
for (int i=;i<=n;i++)
if (a[i].v&&a[i].h==m)a[i].h--,T++;
}
}

bzoj1092的更多相关文章

  1. BZOJ1092 : [SCOI2003]蜘蛛难题

    按时间一步一步模拟. 每一次,首先将所有没有水但是可以被灌到水的管子标记为有水,然后求出有水的管子里水面高度的最小值. 如果$a$号管有水且最小值为$b$,那么说明此时蜘蛛碰到了水. 如果有管子溢出且 ...

  2. 【SCOI2003】【BZOJ1092】蜘蛛难题

    有一堆管道,还有一个蜘蛛Willy,如下图所示.所有管道的是上端开口,下端封底,直径都是1cm,连接两个管道的连接容量无限,但体积可以忽略不计. 在第一个管道上方有一个水源,从中有水不断往下流,速度为 ...

  3. BZOJ第1页养成计划

    嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1000   BZOJ1001   BZOJ1002   BZOJ1003   BZOJ1004   BZOJ1005   ...

随机推荐

  1. Win32程序支持命令行参数的做法(转载)

    转载:http://www.cnblogs.com/lanzhi/p/6470406.html 转载:http://blog.csdn.net/kelsel/article/details/52759 ...

  2. Java求两个数平均值

    如何正确的求2个数的平均值.在练习算法二分查找的时候发现的,以前没有注意到的bug 备注:数据以int类型为例 一.以前的通用写法 /** * 求a+b平均值 * @param a * @param ...

  3. Luogu P1314 聪明的质监员 二分答案

    题目链接 Solution 这个范围不是二分就是结论题就是数学题... 然后再看一会差不多就可以看出来有单调性所以就可以确定二分的解法了 二分那个$W$,用前缀和$O(n+m)$的时间来求出对答案的贡 ...

  4. Unity3D学习笔记(十):Physics类和射线

    物理系统:碰撞器.触发器等 力:有大小有方向的矢量,有受力点位置(和向量的区别) ----F = ma(m质量,a加速度,质量越大,加速度越小,停下来越慢) ----m1v1 = m2v2(冲量守恒定 ...

  5. 【eclipse】阿里巴巴代码检测插件在线安装

    https://p3c.alibaba.com/plugin/eclipse/update

  6. UVa 1602 网格动物(回溯)

    https://vjudge.net/problem/UVA-1602 题意:计算n连通块不同形态的个数. 思路: 实在是不知道该怎么做好,感觉判重实在是太麻烦了. 判重就是判断所有格子位置是否都相同 ...

  7. shell 使用变量

    使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名 ...

  8. MongoDB(课时11 嵌套集合)

    3.4.2.6 嵌套集合运算 MongoDB数据库里每个集合数据可以继续保存其它的集合数据.例如:有些学生信息中需要保存家长信息. 范例: 增加数据 db.students.insert({" ...

  9. selenium-webdriver 简单教程

    ruby环境下selenium/webdriver可以通过selenium-webdriver.gem包进行安装 gem install selenium-webdriver   支持语言及版本有ru ...

  10. js 中的几个假值

    1. 使用场景 if分支语句   /  短路语句while循环语句for里的第二个语句 2. 6个假值 (都属于 原始类型数据的一部分内容,非原始类型即对象都是真值,如:对象.数组.正则.函数   . ...