青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

pku 1661 Help Jimmy 線段樹+階段圖DP

"Help Jimmy" 是在下圖所示的場景上完成的游戲。

場景中包括多個長度和高度各不相同的平臺。地面是最低的平臺,高度為零,長度無限。

Jimmy老鼠在時刻0從高于所有平臺的某處開始下落,它的下落速度始終為1米/秒。當Jimmy落到某個平臺上時,游戲者選擇讓它向左還是向右 跑,它跑動的速度也是1米/秒。當Jimmy跑到平臺的邊緣時,開始繼續下落。Jimmy每次下落的高度不能超過MAX米,不然就會摔死,游戲也會結束。

設計一個程序,計算Jimmy到底地面時可能的最早時間。

Input

第一行是測試數據 的組數t(0 <= t <= 20)。每組測試數據的第一行是四個整數N,X,Y,MAX,用空格分隔。N是平臺的數目(不包括地面),X和Y是Jimmy開始下落的位置的橫豎坐 標,MAX是一次下落的最大高度。接下來的N行每行描述一個平臺,包括三個整數,X1[i],X2[i]和H[i]。H[i]表示平臺的高度,X1[i] 和X2[i]表示平臺左右端點的橫坐標。1 <= N <= 1000,-20000 <= X, X1[i], X2[i] <= 20000,0 < H[i] < Y <= 20000(i = 1..N)。所有坐標的單位都是米。

Jimmy的大小和平臺的厚度均忽略不計。如果Jimmy恰好落在某個平臺的邊緣,被視為落在平臺上。所有的平臺均不重疊或相連。測試數據保證問題一定有解。

Output

對輸入的每組測試數據,輸出一個整數,Jimmy到底地面時可能的最早時間。

Sample Input

1
3 8 17 20
0 10 8
0 10 13
4 14 3

Sample Output

23

解法是這樣

按照y坐標給每個區間排序,以線段端點為節點構圖,每個節點最多有2條邊,用線段樹維護當前線段端點下方的線段。最后求最長路就可以了。

原來想簡化,不要創建s和e節點,結果反而悲劇,各種漏考慮情況。。以后這類題目還是謹慎點吧。。

  1 # include <cstdio>
  2 # include <algorithm>
  3 # include <cstring>
  4 # define mid(p) ((st[p].s+st[p].e)>>1)
  5 # define abs(a) ((a)>0?(a):-(a))
  6 using namespace std;
  7 const int N=150000;
  8 int g[2005],nxt[5005],val[5005],v[5005],c,len[2005];
  9 struct
 10 {
 11    int s,e,id;
 12 }st[N];
 13 struct node
 14 {
 15    int h,s,e;
 16 }data[1005];
 17 int solve(int pos)
 18 {
 19     if(len[pos]!=-1return len[pos];
 20     else
 21     {
 22         if(g[pos]==-1return pos?0xfffffff:0;
 23         else
 24         {
 25             len[pos]=0xfffffff;
 26             for(int p=g[pos];p!=-1;p=nxt[p])
 27             {
 28               len[pos]=min(len[pos],solve(v[p])+val[p]);
 29             }
 30             return len[pos];
 31         }
 32     }
 33 }
 34 bool cmp(const node &a,const node &b)
 35 {
 36    return a.h<b.h;
 37 }
 38 void init(int s,int e,int pos=1)
 39 {
 40    st[pos].s=s;
 41    st[pos].e=e;
 42    st[pos].id=-1;
 43    if(e!=s+1)
 44    {
 45      init(s,mid(pos),pos<<1);
 46      init(mid(pos),e,(pos<<1)+1);
 47    }
 48 }
 49 int get(int target,int pos=1)
 50 {
 51     if(st[pos].id!=-1return st[pos].id;
 52     else if(target>=mid(pos)) return get(target,(pos<<1)+1);
 53     else return get(target,(pos<<1));
 54 }
 55 void insert(int s,int e,int id,int pos=1)
 56 {
 57     if(st[pos].s==s&&st[pos].e==e) 
 58        st[pos].id=id;
 59     else
 60     {
 61         if(st[pos].id!=-1)
 62         {
 63           st[pos<<1].id=st[(pos<<1)+1].id=st[pos].id;
 64           st[pos].id=-1;
 65         }
 66         if(s>=mid(pos)) insert(s,e,id,(pos<<1)+1);
 67         else if(e<=mid(pos)) insert(s,e,id,pos<<1);
 68         else
 69         {
 70             insert(s,mid(pos),id,pos<<1);
 71             insert(mid(pos),e,id,(pos<<1)+1);
 72         }
 73     }
 74 }
 75 inline void addedge(int s,int e,int len)
 76 {
 77    v[c]=e;
 78    val[c]=len;
 79    nxt[c]=g[s];
 80    g[s]=c++;
 81 }
 82 int main()
 83 {
 84    int test;
 85    scanf("%d",&test);
 86    while(test--)
 87    {
 88        int n,x,y,maxnum;
 89        scanf("%d%d%d%d",&n,&x,&y,&maxnum);
 90        for(int i=1;i<=n;i++)
 91        {
 92           scanf("%d%d%d",&data[i].s,&data[i].e,&data[i].h);
 93           data[i].s+=20000;
 94           data[i].e+=20000;
 95        }
 96        x+=20000;
 97        data[0].h=0;
 98        sort(data+1,data+n+1,cmp);
 99        init(0,40001);
100        insert(0,40001,0);
101        memset(g,-1,sizeof(g));
102        c=0;
103        for(int i=1;i<=n;i++)
104        {
105           int p=get(data[i].s);
106           if(data[i].h-data[p].h<=maxnum)
107           {
108                addedge(2*i-1,p?2*p-1:0,p?abs(data[i].s-data[p].s):0);
109                addedge(2*i-1,p?2*p:0,p?abs(data[i].s-data[p].e):0);
110           }
111           p=get(data[i].e);
112           if(data[i].h-data[p].h<=maxnum)
113           {
114               addedge(2*i,p?2*p-1:0,p?abs(data[i].e-data[p].s):0);
115               addedge(2*i,p?2*p:0,p?abs(data[i].e-data[p].e):0);
116           }
117           insert(data[i].s,data[i].e+1,i);
118        }
119        {
120         int p=get(x);
121         addedge(2*n+1,p?2*p-1:0,p?abs(x-data[p].s):0);
122         addedge(2*n+1,p?2*p:0,p?abs(x-data[p].e):0);
123        }
124        memset(len,-1,sizeof(len));
125        printf("%d\n",y+solve(2*n+1));
126    }
127    return 0;
128 }
129 

posted on 2010-11-05 15:47 yzhw 閱讀(234) 評論(0)  編輯 收藏 引用 所屬分類: DPgraph

<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

導航

統計

公告

統計系統

留言簿(1)

隨筆分類(227)

文章分類(2)

OJ

最新隨筆

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久一二三国产| 日韩一级网站| 一区二区高清视频在线观看| 亚洲精品久久久久久久久久久久| 有坂深雪在线一区| 91久久精品国产91性色| 亚洲日本中文| 亚洲综合精品四区| 久久久www成人免费无遮挡大片| 久久久久亚洲综合| 欧美激情精品久久久久久久变态 | 国产精品日韩欧美一区| 国内偷自视频区视频综合| 永久免费精品影视网站| 99视频超级精品| 午夜久久久久久久久久一区二区| 久久一区免费| 亚洲国产日韩在线一区模特| 亚洲裸体视频| 欧美影院在线播放| 欧美成人一品| 国产欧美日韩| 日韩午夜免费| 久久精品av麻豆的观看方式| 欧美成熟视频| 亚洲一区制服诱惑| 欧美激情a∨在线视频播放| 国产精品一二三视频| av不卡在线观看| 久久九九久精品国产免费直播 | 亚洲一区二区三区777| 久久久久一区二区三区| 国产精品久久91| 亚洲电影在线免费观看| 久久激情网站| 一区二区毛片| 免费国产一区二区| 国产主播喷水一区二区| 亚洲一区影音先锋| 欧美激情中文字幕在线| 久久激情视频久久| 国产日韩精品一区观看| 亚洲一级影院| 亚洲日本成人在线观看| 看欧美日韩国产| 韩国在线一区| 久久久久久伊人| 亚洲欧美日韩中文播放| 国产精品高潮视频| 国产精品99久久久久久久vr | 亚洲欧美在线另类| 欧美午夜不卡在线观看免费| 日韩天堂在线视频| 亚洲电影下载| 久热精品视频在线观看一区| 国产一区二区三区黄| 欧美亚洲免费高清在线观看| 亚洲午夜羞羞片| 国产精品国产自产拍高清av| 在线中文字幕不卡| 日韩视频不卡中文| 欧美日韩一视频区二区| 亚洲午夜一区二区三区| 亚洲免费av网站| 欧美体内she精视频| 亚洲一区二区三区四区五区午夜| 亚洲国产另类精品专区| 欧美精品一区二区蜜臀亚洲 | 国产亚洲一级| 久久久精品午夜少妇| 久久精品国产99| 亚洲国产精品一区二区第四页av| 免费不卡亚洲欧美| 老牛嫩草一区二区三区日本| 亚洲欧洲日韩在线| 日韩一级网站| 国产精品一二三视频| 久久人91精品久久久久久不卡| 久久精品在这里| 亚洲精品一区中文| 一区二区三区免费看| 国产午夜亚洲精品羞羞网站| 你懂的亚洲视频| 亚洲欧美日韩综合| 久久久久一区| 免费观看在线综合| 亚洲一区视频| 久久不射中文字幕| 亚洲肉体裸体xxxx137| 99国产精品自拍| 国产日本欧美一区二区| 欧美激情成人在线| 国产精品一卡二卡| 亚洲电影免费观看高清完整版在线| 欧美日韩精品在线观看| 久久久噜噜噜久久| 欧美日韩免费区域视频在线观看| 午夜久久资源| 欧美成人精品1314www| 性做久久久久久久久| 免费亚洲一区| 久久久噜噜噜久久中文字免| 欧美日产一区二区三区在线观看 | 欧美成va人片在线观看| 欧美精品久久一区二区| 久久久精品五月天| 欧美视频在线一区| 欧美黄网免费在线观看| 国产欧美短视频| 亚洲日本视频| 亚洲电影网站| 新狼窝色av性久久久久久| 亚洲精品黄网在线观看| 欧美在线网址| 香蕉久久夜色精品国产使用方法| 欧美插天视频在线播放| 久久男女视频| 国产精品亚洲欧美| 日韩一级黄色av| 亚洲精品资源美女情侣酒店| 久久久久国产精品一区二区| 久久精品91| 国产精品一区毛片| 亚洲一区国产精品| 亚洲在线视频观看| 欧美日韩免费一区| 亚洲美女中出| 亚洲视频大全| 欧美精品亚洲二区| 亚洲国产精品悠悠久久琪琪| 亚洲国产精品第一区二区| 久久亚洲国产成人| 麻豆av一区二区三区| 狠狠色丁香久久综合频道| 亚欧美中日韩视频| 久久一区二区三区国产精品| 国产一区高清视频| 欧美一区二区三区免费大片| 欧美在线视频一区二区| 国产一区二区欧美| 久久精视频免费在线久久完整在线看| 久久se精品一区精品二区| 国产香蕉97碰碰久久人人| 久久精品二区三区| 欧美91福利在线观看| 亚洲国产精品第一区二区三区| 欧美成年人网站| 欧美freesex交免费视频| 亚洲黄色在线| 一本色道88久久加勒比精品 | 欧美激情一区二区三区高清视频| 1024日韩| 欧美日韩视频在线一区二区观看视频| 亚洲精品久久| 午夜精品亚洲一区二区三区嫩草| 国产精品美女久久久久久久| 亚洲欧美日韩视频二区| 久久综合狠狠| 一区二区三区高清视频在线观看| 欧美婷婷在线| 羞羞漫画18久久大片| 欧美成人精品不卡视频在线观看| 亚洲精品少妇网址| 国产精品视频网站| 久久亚洲视频| 99re热精品| 久久久久久久久岛国免费| 亚洲国产精品激情在线观看| 欧美丝袜一区二区三区| 久久av老司机精品网站导航| 最新亚洲一区| 久久久久久久91| 99精品视频一区二区三区| 国产伦精品一区二区三区照片91| 久久久久久久久久久久久女国产乱 | 亚洲经典自拍| 久久国产主播| 一区二区欧美日韩| 黑人操亚洲美女惩罚| 欧美日韩在线播放一区二区| 久久本道综合色狠狠五月| 一区二区三区蜜桃网| 亚洲第一网站免费视频| 久久精品视频在线看| 亚洲无限av看| 亚洲国语精品自产拍在线观看| 国产精品高清免费在线观看| 欧美a一区二区| 久久久久久夜精品精品免费| 一区二区三区蜜桃网| 亚洲国产精品激情在线观看| 老色鬼精品视频在线观看播放| 亚洲一区在线免费观看| 亚洲精品色婷婷福利天堂| 在线不卡免费欧美| 国产一区二区三区在线观看免费视频 | 午夜精品福利视频| 日韩视频免费观看高清在线视频| 揄拍成人国产精品视频| 国产嫩草影院久久久久|