BZOJ4009 HNOI2015 接水果葡京游戏网址

4009: [Hnoi2015]接水果

Time Limit: 60 Sec  Memory Limit: 512 MB

小美对大锤说:随时喊当大英雄,不拼怎么行。大锤面无表情,无言以对。

Description

风见幽香万分喜欢玩一个叫作
osu!的一日游,其中她最欣赏玩的情势就是接水果。由于他早就DT FC 了The big
black,
她以为这些游乐太简单了,于是发明了一个越来越难的本子。首先有一个地图,是一棵由
n 个极点、n-1 条边组成的树(例如图 1交由的树包含 8 个极端、7
条边)。这颗树上有 P 个盘子,每个盘子实际上是一条路子(例如图 1 中顶点 6
到极限 8 的路径),并且每个盘子还有一个权值。第 i
个盘子就是顶点aiai到顶点bibi的门径(由于是树,所以从aiai到bibi 的门路是绝无仅有的), 权值为cici。接下来依次会有Q个水果掉下来,每个水果本质上也是一条路径,第i
个瓜果是从顶点 uiui 到顶点vivi 的路子。 
菲菲每一回需要选取一个盘子去接当前的瓜果:一个行情能接住一个水果,当且仅当盘子的路线是鲜果的路线的子路径(例如
图1中从 3到7 的路子是从1到8的路子的子路径)。 
此处规定:从a 到b的门道与从b到
a的门道是同样条路径。当然为了加强难度,对于第 i
个水果,你需要接纳能接住它的具有盘子中,权值第 kiki 小的这么些盘子,每个盘子可重复使用(没有使用次数的上限:一个盘子接完一个水果后,前边还可继续接其他水果,只要它是鲜果路径的子路径)。幽香认为那个娱乐很难,你能轻轻松松解决给她看呢? 
葡京游戏网址 1

这不就是当今大规模真屌丝们的写照么?那个实在很拼命拼搏,却自嘲称自己屌丝的人除了。

Input

先是行五个数 n和P
和Q,表示树的高低和物价指数的个数和瓜果的个数。 
接下去n-1 行,每行三个数
a、b,表示树上的a和b 之间有一条边。树中顶点按1到 n标号。 
接下去 P 行,每行四个数
a、b、c,表示路径为 a 到 b、权值为 c 的盘子,其中0≤c≤109109,a不对等b。 
接下去Q行,每行多少个数 u、v、k,表示路径为 u到 v的果品,其中
u不等于v,你需要选用第 k小的盘子,第k
小一定存在。

您是不是也像王大锤一样,天天喊要加油了,我要恪尽成为马云第二,我要赚大钱等等一大堆志向,却永远想得多,做得少,浅尝则止,容易摒弃。

Output

对于每个果子,输出一行表示拔取的物价指数的权值。

即使影片被过四人骂糟糕笑,段子烂俗,就是加长版的网剧,我从相对第3季开头就感到已经没那么好笑了,也许是原则性的搞笑套路被频繁用了N次,我们都审美疲劳了吧。然而,我在电影院里的感官是,有些段子即便很刻意,但稍事仍然让自己稍微笑了一晃,周围的观众也是笑声不断,作为一部合家欢爆米花电影至少是合格的。

Sample Input

10 10 10 
1 2 
2 3 
3 4 
4 5 
5 6 
6 7 
7 8 
8 9 
9 10 
3 2 217394434 
10 7 13022269 
6 7 283254485 
6 8 333042360 
4 6 442139372 
8 3 225045590 
10 4 922205209 
10 8 808296330 
9 2 486331361 
4 9 551176338 
1 8 5 
3 8 3 
3 8 4 
1 8 3 
4 8 1 
2 3 1 
2 3 1 
2 3 1 
2 4 1 
1 4 1

这么些骂烂的恋人估摸是本人预期与制片方的大肆宣传把大家的指望值抬高了,我们心中中怎么也得80分以上吧,但其实情况就是刚刚及格的水准,落差太大,自然会掀起逆反激情发生,也是爱之深,责之切。同样的动静也发出在《十万个冷笑话》身上。

Sample Output

442139372 
333042360 
442139372 
283254485 
283254485 
217394434 
217394434 
217394434 
217394434 
217394434

我看了一些叫兽的有的募集视频以及时不时新浪PO出来的工作照和情节,以及过去给我们留下的干活形象,我是能感受到主创们或者想拍好电影的,只是心痛水平和经验暂时未到吧。

Hint

葡京游戏网址 2

  我没有权力号…因为时限大就变成权限题真的好呢?

  好像自己也讲不出什么不佳的道理。

  这题挺有意思的,对于自身这种码废+代码能力差+思维混乱+弱的人来说,那题挺杀时间的…一个早晨就给它跪了。

  啊反正你就是能把一个行情变成一个或者七个矩形?把一个水果变成一个点?

  然后就是总计覆盖点的权值第k小的矩形是哪个?

  hin有道理啊我干吗就是想不出来呢吗吗?

  然后只要您会扫描线的话
就是一道全体二分裸题了?

  假使不会的话,你一定会差分是吧…

  把一个矩形按x轴拆成左加右减,树状数组搞搞。

  然后就是一道全体二分裸题了?

  为何一个个 一百行都不要的
我却打了那样多呢?

  思维混乱+弱啊!

  注意数组要开两倍,因为盘子可能有多少个。

#include   <iostream>
#include   <cstdio>
#include    <cstdlib>
#include    <algorithm>
#include    <vector>
#include    <cstring>
#include    <queue>
#include    <complex>
#include    <stack>
#define LL long long int
#define dob double
using namespace std;

const int N = 40010;
struct Node{int to,next;}E[N<<1];
struct Plate{
  int xl,xr,yl,yr,val;
  bool operator <(const Plate &p)const{
    return val<p.val;
  }
}plate[N<<1];
struct Fruit{
  int x,y,k,id;
  bool operator <(const Fruit &f)const{
    return x<f.x;
  }
}fruit[N],que1[N],que2[N];
struct Data{
  int x,l,r,val;
  bool operator <(const Data &l)const{
    return x<l.x;
  }
}Line[N<<1];
int n,P,Q,Ans[N],cnt,head[N],tot;
int fa[21][N],dep[N],size[N],son[N],top[N],dfn[N],tim,last[N];
struct Bit{
  int A[N],vis[N];
  inline int lb(int x){
    return x&-x;
  }
  inline void upd(int x,int val){
    for(;x<=n;x+=lb(x)){
      if(vis[x]!=tim)A[x]=0,vis[x]=tim;
      A[x]+=val;
    }
  }
  inline void update(int l,int r,int val){
    upd(l,val);upd(r+1,-val);
  }
  inline int query(int x,int ans=0){
    for(;x;x-=lb(x)){
      if(vis[x]!=tim)A[x]=0,vis[x]=tim;
      ans+=A[x];
    }
    return ans;
  }
}T;

inline int gi(){
  int x=0,res=1;char ch=getchar();
  while(ch>'9'||ch<'0'){if(ch=='-')res*=-1;ch=getchar();}
  while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  return x*res;
}

inline void link(int u,int v){
  E[++tot]=(Node){v,head[u]};
  head[u]=tot;
}

inline void join(int x){
  for(int i=1;i<=15;++i)
    fa[i][x]=fa[i-1][fa[i-1][x]];
}

inline void dfs1(int x,int fat){
  fa[0][x]=fat;dep[x]=dep[fat]+1;join(x);
  dfn[x]=++tim;
  for(int e=head[x];e;e=E[e].next){
    int y=E[e].to;if(y==fa[0][x])continue;
    dfs1(y,x);
  }
  last[x]=tim;
}

inline int lca(int x,int y){
  if(x==y)return x;
  if(dep[x]<dep[y])swap(x,y);
  for(int i=15;i>=0;--i)
    if(dep[fa[i][x]]>=dep[y])
      x=fa[i][x];
  if(x==y)return x;
  for(int i=15;i>=0;--i)
    if(fa[i][x]!=fa[i][y])
      x=fa[i][x],y=fa[i][y];
  return fa[0][x];
}

inline int jump(int x,int goal){
  for(int i=15;i>=0;--i)
    if(dep[fa[i][x]]>dep[goal])
      x=fa[i][x];
  return x;
}

/*
  把答案(盘子)二分。
  把左边的矩形加进去。
  然后check,calc一下盘子个数,和k比较一下,划分一下。
  递归处理。
*/

inline void solve(int optl,int optr,int l,int r){
  if(optl>optr || l>r)return;++tim;
  if(optl==optr){
    for(int i=l;i<=r;++i)
      Ans[fruit[i].id]=plate[optl].val;
    return;
  }
  int mid=(optl+optr)>>1,tot1=0,tot2=0,k=l,tmp=0,cnt1=1,cnt2=l;
  for(int i=optl;i<=mid;++i){
    Line[++tmp]=(Data){plate[i].xl,plate[i].yl,plate[i].yr,1};
    Line[++tmp]=(Data){plate[i].xr+1,plate[i].yl,plate[i].yr,-1};
  }
  sort(Line+1,Line+tmp+1);
  while(cnt1<=tmp && cnt2<=r){
    if(Line[cnt1].x<=fruit[cnt2].x){
      int xl=Line[cnt1].l,xr=Line[cnt1].r,val=Line[cnt1].val;
      T.update(xl,xr,val);cnt1++;
    }
    else{
      int sum=T.query(fruit[cnt2].y);
      if(sum>=fruit[cnt2].k)que1[++tot1]=fruit[cnt2++];
      else fruit[cnt2].k-=sum,que2[++tot2]=fruit[cnt2++];
    }
  }
  while(cnt2<=r){
    int sum=T.query(fruit[cnt2].y);
    if(sum>=fruit[cnt2].k)que1[++tot1]=fruit[cnt2++];
    else fruit[cnt2].k-=sum,que2[++tot2]=fruit[cnt2++];
  }
  for(int i=1;i<=tot1;++i)fruit[k++]=que1[i];
  for(int i=1;i<=tot2;++i)fruit[k++]=que2[i];
  solve(optl,mid,l,l+tot1-1);
  solve(mid+1,optr,l+tot1,r);
}

int main()
{
  freopen("fruit_hnoi2015.in","r",stdin);
  freopen("fruit_hnoi2015.out","w",stdout);
  n=gi();P=gi();Q=gi();
  for(int i=1;i<n;++i){
    int u=gi(),v=gi();
    link(u,v);link(v,u);
  }
  dfs1(1,1);
  for(int i=1;i<=P;++i){
    int a=gi(),b=gi(),c=gi(),u=lca(a,b);
    if(dfn[a]>dfn[b])swap(a,b);
    if(u!=a)plate[++cnt]=(Plate){dfn[a],last[a],dfn[b],last[b],c};
    else{
      int v=jump(b,a);
      if(dfn[v]>1)plate[++cnt]=(Plate){1,dfn[v]-1,dfn[b],last[b],c};
      if(last[v]<n)plate[++cnt]=(Plate){dfn[b],last[b],last[v]+1,n,c};
    }
  }
  for(int i=1;i<=Q;++i){
    int a=gi(),b=gi(),k=gi();
    if(dfn[a]>dfn[b])swap(a,b);
    fruit[i]=(Fruit){dfn[a],dfn[b],k,i};
  }
  sort(plate+1,plate+cnt+1);
  sort(fruit+1,fruit+Q+1);
  solve(1,cnt,1,Q);
  for(int i=1;i<=Q;++i)printf("%d\n",Ans[i]);
  return 0;
}

  

 

这一次的被骂潮,让我记念在年终,在微博上有人发了一个问题:《万万没悟出》是成功人员自称屌丝来赚取屌丝的钱吧?从详细描述来看,提问者是个表达逻辑混乱,又很中二的人。

题目大意是是说,叫兽,刘循子墨,白客,已是成功人员,不是屌丝,然后他们自称是屌丝,来突显屌丝的惊喜,自黑揶揄,来得到屌丝的确认,伪装成穷逼来赚穷逼的钱,这丰盛不道德。

见状如此的人和谈话就让我来气,此人犯了一个很二的逻辑错误:认为赚钱是不道德的。认为已成功的人无法装屌丝赚屌丝钱,这是诈骗,这是欺负人。按照她的逻辑,卓别林和周星驰就该下地狱了,她俩每回都拉低身段,扮演屌丝小人物和命局搏击,举行逆转之路,他们是为屌丝群体代言,为屌丝发声,是给屌丝们愿意和振奋。在这些进程也收获了屌丝们的认同,也就是所谓的站在把钱挣了,叫兽们没怎么难堪的。

屌丝还有逆转之日,而傻逼则并未那一天。

我倒是建议这位情人,与其花时间探究别人是不是在搞阴谋,不如正正经经多看看书,多学些别人是怎么成功的经验方法,才是正经事,才能给别人成立更多价值,同时协调才能逆转。

熟稔叫兽、白客等人成长经验的人都知情,他们一起先也是普通人,也是所谓起亚传统里的『屌丝』。叫兽是理工科毕业,做路桥督查工程师,但她并不喜欢这份工作,于是拔取空暇时间做要好喜好的游戏摄像,渐渐在网络上挑起关注。白客是农林高校学生,在校期间间或做的日和搞笑动漫广为人知,但大学毕业后并不如意,北漂做自由职业,直到前边赶上叫兽并参与了相对没悟出连串网剧才大红大紫。

她俩心爱自己的事业,热爱成立快乐与大家大饱眼福,他们也是从籍籍无名,但经过自己的全力、执着与机会才得到了现行的火候和成功。他们不是屌丝逆袭是何许?

自身再享受我多少个朋友的故事。

她们就算相互不认识,他们事先也很迷茫,也做着自己不希罕的办事,直到都偶然间进入爱尔兰语培训行业,进了不同的信用社。一个是做销售,我称之为A;一个是做助教,称呼B。他们休闲时间明确也随后回落了,每便周末叫她们出去聚聚,都是各个突击。

而是,他们的加班是有价值的,A经过3个月的培训期,很快就上手了,并又用了半年岁月变成了她们徐家汇校区的销售第2名,收入也比以前大幅提高,个人也变得更自信,感觉温馨更有价值。而销售亚军则是比她更拼更有经验更成熟的长辈。B也是经验了某些个月的培养,上课的始末都亟待写成逐字稿,并交由上级修改,并试讲多次,审核通过后才能规范上课。正式成为助教后也鉴于她的努力与注意很快成为了她这一个校区的名次靠前的民办助教。

本身通过她们两个人的所作所为发现,他们只要确定了团结的靶子,就坚决的投入时间专研,想尽办法提高业务水平。我有分别问他们做的这么好,是商店的扶植机制形成,仍旧你们靠自身努力的结果。他们的答案都震惊的一样,和他们同期进入店铺的多数人都已经被淘汰或机关离职了,他们假如也对友好放低要求,臆度也不会有现在的形成。

说回《万万没悟出》,我深感剧本也是参考周星驰屌丝逆转的老路来写的,同时也暗合叫兽们融洽的奋斗史。大锤在小美和孙悟空的砥砺下,努力锻炼,即便提升有限,小美也没法的披露:『你是个不自量力的木头』,但也让小美看到了大锤有在卖力,有在进化,有真正意义上的上进心了,人笨不要紧,勤能补拙嘛。

自身对叫兽们的企盼也是相同的,即便这一次让众多观众们不佳听,输了口碑,但他俩是着力了的,作为一群不是正规出身的导演、演员、编剧,这早就很珍爱了,叫兽们也是『自不量力的木头』,他们尽管还不够好,但却在百折不回做自己热爱的事业,我相信这纯属不是她们最终一部影片。

这大千世界没有不用付出努力就足以成功。你既然要励志当『英雄』就要提交相应的大力和代价。当您年老时可以对协调说『我的生计一片无悔,我想起这天夕阳下的跑动,这是自己逝去的年轻。