强烈建议不要做此题,此题描述差到极点!毒瘤出题人

首先有想法就是从起点往后按照出水管依次满足,但多个水域需要合起来求下一个最低出水口,所以并不是很好维护

所以最好按照时间模拟

先求出当前状态下的最低水平面,

然后看这些最低的面能不能通过出水口到达新的水坑,把这些水坑加入当前状态

然后再求一次当前状态下的最低水平面

然后再把他们依次灌1,,,

直到蜘蛛所在的上一块被灌,,输出上次的答案

然后就需要根据题目坑爹的描述特判:

1、第一个水坑的坑底的蜘蛛0秒被灌

2、正好在坑顶的蜘蛛会被灌

bzoj  原题discus有良心数据,另官方数据第九个输出是-1

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
int n,i,m,v[30],v2[30],x,y,yy,ans,minn,zd,sx[30],j,top,last;
bool vis[30];
struct la
{int x,y,yy;
}g[30];
vector<int>vv;
int tu[105],lt[30][205],sta[30];
bool cmp(la a,la b)
{return a.x<b.x;
}
void dfs(int o)
{
if(vis[lt[o][g[o].y+g[o].yy]]==0)
{vis[lt[o][g[o].y+g[o].yy]]=1;vv.push_back(lt[o][g[o].y+g[o].yy]);dfs(lt[o][g[o].y+g[o].yy]);
}
}
int main()
{vis[0]=1;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d%d%d",&g[i].x,&g[i].y,&g[i].yy);    }scanf("%d",&m);for(i=1;i<=n;i++)tu[g[i].x]=i;
//   memset(v,0x7f,sizeof(v));for(i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&yy);
lt[tu[x-1]][y]=tu[x+yy];
lt[tu[x+yy]][y]=tu[x-1];   }minn=999999;scanf("%d%d",&zd,&yy);if(zd==1&&yy==g[1].y+g[1].yy){printf("0");return 0;}vv.push_back(1);vis[1]=1;while(1){//求出目前水位最低的int maxx=-1;top=0;for(i=0;i<vv.size();i++) {   if(maxx==g[vv[i]].y+g[vv[i]].yy){sta[++top]=vv[i];             }           if(g[vv[i]].y+g[vv[i]].yy>maxx){top=0;maxx=g[vv[i]].y+g[vv[i]].yy;sta[++top]=vv[i];}}//如果加进去最终会流到哪
for(i=1;i<=top;i++)
{dfs(sta[i]);
}//再求一遍当前最小 top=0;for(i=0;i<vv.size();i++) {   if(maxx==g[vv[i]].y+g[vv[i]].yy){sta[++top]=vv[i];              }           if(g[vv[i]].y+g[vv[i]].yy>maxx){top=0;maxx=g[vv[i]].y+g[vv[i]].yy;sta[++top]=vv[i];}}//果断加水for(i=1;i<=top;i++){if(sta[i]==zd&&g[sta[i]].y+g[sta[i]].yy==yy){printf("%d",ans);return 0;      }}for(i=1;i<=top;i++){g[sta[i]].yy--;ans++;if(g[sta[i]].yy<0) {printf("-1");return 0;     }   }   //检验答案if(g[zd].y+g[zd].yy+1==yy){printf("%d",last);return 0;}     last=ans;}
}

2017.10.17 蜘蛛难题 思考记录相关推荐

  1. 2017.10.29 染色方案 思考记录

    这个题数据特别小,于是想到状压多维之流. 状压是比较麻烦的,虽然也能写,但多维dp明显要好写一些 根据15去设计状态是没有前途的,因为按颜色分一定会MLE 这时就考虑根据5分,这样不同颜色就离散了,就 ...

  2. 2017.10.24 上升序列 思考记录

    终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...

  3. 2017.10.9 放棋子 思考记录

    .这个题根本没想到错排,但它似乎离散为斜对角之后很有规律,于是打表,推出了式子... 经常手玩式子,前几天的测试根本没想到卡特兰数然后用组合数硬生生凑了出来,然后这个题的错排.. f表示答案  g表示 ...

  4. 2017.10.7 括号序列 思考记录

    这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...

  5. 2017.10.30 覆盖问题 思考记录

    从细节入手已经从一种技巧变成一种策略了. 题目给出的条件很奇怪,是3个正方形,, 为什么是3个而不是4个或2个呢.. 于是先用一个大矩形把所有点卡住 然后显然矩形的每个边 都有一个正方形和他在一条直线 ...

  6. 2017.10.29 软件安装 思考记录

    这个题一开始卡了,,就是树内的必选和可选分不太清 ,其实很好分,对于一个子树,根是必选,子节点是可选 然后递归保证正确性 可选就是把每个花费都看成一个物品往里背包 注: 1.必选<c[o]的要清 ...

  7. 2017.10.26 星际贸易 思考记录

    这个题非常繁琐,而且网上的题解非常不详细.. 首先第一问 由于所有的点都要走到,所以就是01背包 需要可持久化背包来输出方案..类似floyd的判断方式 然后这些选定的点都一定是要维护的, 第二问就是 ...

  8. 2017.10.25 打鼹鼠 思考记录

    挺直白的dp 离散的是移动的过程,因为经过一番移动一定是为了出现在某个地点 所以直接m^2枚举,类似lis的转移即可 码: #include<iostream> #include<c ...

  9. 2017.10.19 大陆争霸 思考记录

    一上来想到拓扑分层最短路,但需要多源最短路.. 这题考查的是对dij的理解 dij只能跑最短路每次都找极值点进行一次拓展,同时不能有负边权 所以一次需要确定  两个值都确定的一个点所以扩展的条件有两个 ...

最新文章

  1. 北京大学崔斌教授组招收图机器学习、AutoML等方向科研实习生
  2. ubuntu系统安装FTP
  3. ZCMU 1894: Power Eggs
  4. 115个Java面试题和答案——终极列表(下)
  5. RAC静默安装与DG搭建
  6. PhalGo-Echo路由
  7. 小程序发布上线流程_微信小程序发布流程
  8. 线性代数----逆矩阵的性质和求法
  9. Dubbo扩展点注解之@Adaptive
  10. 年龄识别数据集IMDB-WIKI
  11. Hadoop系列之二:大数据、大数据处理模型及MapReduce
  12. html实现360展示图片,js html5 360度全景图片预览效果
  13. JAVA中GUI在Button中设置中文乱码问题
  14. 强化学习适合解决什么样的问题
  15. 芯盾时代: 开启“智慧身份认证”新时代
  16. 国米w ndows错误,欧冠国米1:2巴萨!球迷一席话揭球队输球真因,一语中的
  17. 基于深度学习的大规模交通标志识别(附6GB交通标志数据集)
  18. 中科院计算机和理论物理双硕士白,中国科学院等离子体物理研究所
  19. 【GDPMS】项目管理实战公益培训第十二期
  20. 兆声清洗晶片过程中去除力的分析

热门文章

  1. Spring和SpringMVC整合
  2. mysql5.7开启二进制日志_MySQL5.7二进制日志
  3. LaTeX TikZ绘图——组合数学中棋盘多项式的画法
  4. python replace函数后面的数字的含义
  5. 使用WORD封面自带模板?
  6. python的自带的ide运行_为什么同样的语句在python自带的ide和pycharm中运行的结果不一样?...
  7. 如何删除git config中的某一个配置项
  8. jQuery学习之三---工具
  9. 数组中的两个常见异常
  10. android 下拉刷新实现方式,Android RecyclerView设置下拉刷新的实现方法