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

coreBugZJ

此 blog 已棄。

Query on a tree, ACM-DIY Group Contest 2011 Spring 之 5,HDOJ 3804

Query on a tree

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem Description
There are some queries on a tree which has n nodes. Every query is described as two integers (X, Y).For each query, you should find the maximum weight of the edges in set E, which satisfies the following two conditions.
1) The edge must on the path from node X to node 1.
2) The edge’s weight should be lower or equal to Y.
Now give you the tree and queries. Can you find out the answer for each query?
 

Input
The first line of the input is an integer T, indicating the number of test cases. For each case, the first line contains an integer n indicates the number of nodes in the tree. Then n-1 lines follows, each line contains three integers X, Y, W indicate an edge between node X and node Y whose value is W. Then one line has one integer Q indicates the number of queries. In the next Q lines, each line contains two integers X and Y as said above.
 

Output
For each test case, you should output Q lines. If no edge satisfy the conditions described above,just output “-1” for this query. Otherwise output the answer for this query.
 

Sample Input
1
3
1 2 7
2 3 5
4
3 10
3 7
3 6
3 4
 

Sample Output
7
7
5
-1

Hint

2<=n<=10^5
2<=Q<=10^5
1<=W,Y<=10^9
The data is guaranteed that your program will overflow if you use recursion.
 

Source
ACM-DIY Group Contest 2011 Spring


OJ上的題解,好復雜,表示沒看懂

這個解法好簡單,謝謝 Topsky 的指點,表示 YM

手寫棧 DFS 樹中的每個點,用 map 記錄當前訪問的點到根節點的所有權值,用 map 的 upper_bound 求得當前訪問點上的所有詢問的結果,DFS 結束后一起輸出結果。


  1 #include <iostream>
  2 #include <cstdio>
  3 #include <map>
  4 #include <list>
  5 #include <stack>
  6 #include <cstring>
  7 #include <algorithm>
  8 
  9 using namespace std;
 10 
 11 const int N = 100009;
 12 const int Q = 100009;
 13 
 14 typedef  pair< intint > PII;
 15 typedef  list< PII > LPII;
 16 typedef  LPII::iterator  LPII_I;
 17 typedef  pair< int, LPII_I > SD;
 18 typedef  stack< SD >  STACK;
 19 typedef  map< intint > MII;
 20 typedef  MII::iterator  MII_I;
 21 
 22 int q;
 23 LPII qry[ N ]; //  y, id
 24 int ans[ Q ];
 25 
 26 int n, wf[ N ];
 27 LPII adj[ N ]; // node, weight
 28 
 29 void input() {
 30         int i, u, v, w;
 31         scanf( "%d"&n );
 32         for ( i = 1; i <= n; ++i ) {
 33                 adj[ i ].clear();
 34                 qry[ i ].clear();
 35         }
 36         for ( i = 1; i < n; ++i ) {
 37                 scanf( "%d%d%d"&u, &v, &w );
 38                 adj[ u ].push_back( PII(v,w) );
 39                 adj[ v ].push_back( PII(u,w) );
 40         }
 41         scanf( "%d"&q );
 42         for ( i = 1; i <= q; ++i ) {
 43                 scanf( "%d%d"&u, &v );
 44                 qry[ u ].push_back( PII(v,i) );
 45         }
 46 }
 47 
 48 void solve() {
 49         static int ink[ N ];
 50         SD sd;
 51         STACK stk;
 52         MII   con;
 53         LPII_I   ite;
 54         
 55         sd.first = 1;
 56         sd.second = adj[ 1 ].begin();
 57         stk.push( sd );
 58         memset( ink, 0sizeof(ink) );
 59         ink[ 1 ] = 1;
 60         con[ -1 ] = 1;
 61         wf[ 1 ] = -1;
 62         for ( ite = qry[ 1 ].begin(); ite != qry[ 1 ].end(); ++ite ) {
 63                 ans[ ite->second ] = -1;
 64         }
 65         while ( ! stk.empty() ) {
 66                 sd = stk.top();
 67                 stk.pop();
 68                 if ( sd.second == adj[ sd.first ].end() ) {
 69                         if ( --con[ wf[ sd.first ] ] < 1 ) {
 70                                 con.erase( wf[ sd.first ] );
 71                         }
 72                 }
 73                 else {
 74                         int j = sd.second->first;
 75                         int w = sd.second->second;
 76                         if ( ink[ j ] ) {
 77                                 ++(sd.second);
 78                                 stk.push( sd );
 79                         }
 80                         else {
 81                                 ink[ j ] = 1;
 82                                 wf[ j ] = w;
 83                                 ++(con[ w ]);
 84                                 for ( ite = qry[ j ].begin(); ite != qry[ j ].end(); ++ite ) {
 85                                         MII_I  mit = con.upper_bound( ite->first );
 86                                         --mit;
 87                                         ans[ ite->second ] = mit->first;
 88                                 }
 89                                 ++(sd.second);
 90                                 stk.push( sd );
 91                                 sd.first = j;
 92                                 sd.second = adj[ j ].begin();
 93                                 stk.push( sd );
 94                         }
 95                 }
 96         }
 97 }
 98 
 99 void output() {
100         for ( int i = 1; i <= q; ++i ) {
101                 printf( "%d\n", ans[ i ] );
102         }
103 }
104 
105 int main() {
106         int td, i, u, v, w;
107         scanf( "%d"&td );
108         while ( td-- > 0 ) {
109                 input();
110                 solve();
111                 output();
112         }
113         return 0;
114 }
115 


posted on 2011-03-26 20:32 coreBugZJ 閱讀(1108) 評論(0)  編輯 收藏 引用 所屬分類: ACM

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            黄色日韩网站视频| 亚洲国产三级在线| 午夜精品国产精品大乳美女| 亚洲精品视频在线播放| 欧美激情片在线观看| 亚洲最新在线| 99riav久久精品riav| 国产精品久久久久久av下载红粉 | 夜夜嗨av一区二区三区| 亚洲欧洲精品一区二区三区| 欧美绝品在线观看成人午夜影视 | 亚洲日本va午夜在线电影| 亚洲国产美国国产综合一区二区| 欧美精品91| 亚洲欧美日韩在线综合| 欧美亚洲视频一区二区| 亚洲国产三级网| 一区二区三区精品| 极品日韩av| 亚洲六月丁香色婷婷综合久久| 欧美视频中文在线看| 久久一日本道色综合久久| 欧美激情第4页| 午夜久久tv| 男人插女人欧美| 午夜亚洲性色福利视频| 久久综合电影| 午夜精品在线| 欧美激情一级片一区二区| 午夜精品福利视频| 欧美好骚综合网| 久久精品国产欧美激情| 欧美理论电影在线观看| 久久精品一二三| 欧美日韩视频一区二区| 久久一区视频| 国产精品视频yy9299一区| 欧美激情精品久久久六区热门| 国产精品你懂的在线| 欧美不卡在线视频| 国产精品一区一区| 亚洲看片网站| 亚洲国产欧美一区二区三区久久 | 欧美午夜电影网| 欧美激情精品久久久久久久变态 | 欧美mv日韩mv国产网站app| 亚洲欧美久久久| 欧美精品一区二区三区视频| 另类亚洲自拍| 国产亚洲欧美一区| 亚洲一区二区三区在线| 99成人免费视频| 免费欧美日韩国产三级电影| 久久精品在这里| 国产精品外国| 亚洲小说欧美另类婷婷| 一区二区日韩免费看| 欧美波霸影院| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美国产精品v| 韩日成人av| 欧美在线观看一区二区| 欧美一级二级三级蜜桃| 欧美四级电影网站| 亚洲免费观看在线观看| 99香蕉国产精品偷在线观看| 欧美aⅴ99久久黑人专区| 免费亚洲视频| 亚洲人成免费| 欧美精品成人在线| 亚洲麻豆国产自偷在线| 一区二区三区久久网| 欧美精品乱码久久久久久按摩| 欧美激情视频一区二区三区不卡| 国内精品久久久久久| 久久国产色av| 免费欧美电影| 亚洲国产精品久久久久秋霞影院 | 亚洲激情av| 欧美国产综合一区二区| 亚洲毛片播放| 欧美在线www| 黑人一区二区| 欧美gay视频| 亚洲日本精品国产第一区| 99精品欧美一区二区三区综合在线| 欧美freesex8一10精品| 亚洲免费精彩视频| 欧美亚洲在线| 1024成人| 欧美日韩国产123| 亚洲一区二区三区精品动漫| 久久精品官网| 亚洲欧洲日产国产综合网| 欧美日韩不卡| 欧美一区二区三区在线观看视频 | 午夜精品久久久久久久久久久久久| 国产精品手机视频| 久久久欧美一区二区| 亚洲国产色一区| 性欧美大战久久久久久久免费观看| 国产精品综合色区在线观看| 噜噜爱69成人精品| 亚洲私人影院| 欧美激情国产精品| 欧美在线观看你懂的| 亚洲国产电影| 国产欧美va欧美不卡在线| 欧美+亚洲+精品+三区| 亚洲一区二区三区欧美| 亚洲第一在线视频| 久久国产精品99国产精| 日韩午夜在线电影| 狠狠久久婷婷| 国产精品国产| 欧美激情综合色| 久久成人免费网| 亚洲视频网站在线观看| 亚洲国产成人不卡| 久久久成人网| 亚洲欧美日韩中文在线制服| 亚洲精品久久久久久久久久久久| 国产精品一区免费观看| 欧美精品国产精品| 另类av导航| 久久久噜噜噜久久中文字免| 亚洲欧美中文日韩v在线观看| 最新国产成人在线观看| 久久久久久欧美| 欧美一区国产二区| 亚洲综合欧美日韩| 在线中文字幕不卡| 99国产精品国产精品久久| 又紧又大又爽精品一区二区| 国产亚洲精品久久久| 国产精品久久久久久av下载红粉| 欧美精品一区在线发布| 免费视频久久| 免费成人黄色av| 久久综合国产精品| 久久躁日日躁aaaaxxxx| 久久露脸国产精品| 久久久精品日韩欧美| 久久国产一区| 久久精品最新地址| 久久久蜜桃精品| 久久午夜色播影院免费高清| 久久久精彩视频| 玖玖在线精品| 女主播福利一区| 欧美精品乱码久久久久久按摩| 欧美国产精品劲爆| 欧美日本中文字幕| 欧美性猛交xxxx免费看久久久 | 欧美午夜精品久久久久免费视| 欧美国产亚洲另类动漫| 欧美日韩国产成人在线91| 欧美日韩成人一区二区| 欧美视频网址| 国产美女扒开尿口久久久| 国产在线精品成人一区二区三区| 国产亚洲精品久久久久婷婷瑜伽| 国产一本一道久久香蕉| 亚洲国产精品传媒在线观看| 91久久午夜| 亚洲免费在线视频| 久久―日本道色综合久久| 欧美高清影院| 99国产精品久久| 欧美伊人影院| 欧美国产亚洲另类动漫| 国产精品久久久久影院色老大| 国产伪娘ts一区| 亚洲精品视频一区| 午夜精彩视频在线观看不卡| 久色婷婷小香蕉久久| 亚洲伦理在线| 久久精品99久久香蕉国产色戒| 欧美国产精品久久| 国产精品一区久久久| 亚洲欧洲日产国码二区| 亚洲欧美在线播放| 你懂的视频一区二区| 99精品免费网| 久久久久国色av免费观看性色| 欧美日韩一区二区免费在线观看| 国产一区日韩二区欧美三区| 亚洲欧洲日产国码二区| 欧美一区二区三区日韩视频| 亚洲福利小视频| 香蕉亚洲视频| 欧美性猛交xxxx免费看久久久| 精品成人国产| 午夜视频久久久久久| 亚洲国产精品一区二区www| 欧美影院午夜播放| 欧美日韩中文| 亚洲伦伦在线| 欧美国产成人精品| 欧美中文字幕在线视频|