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

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 閱讀(1096) 評論(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>
            狠狠色狠狠色综合日日91app| 国产伦精品一区二区三区| 一区二区视频免费在线观看 | 美女黄网久久| 亚洲福利视频一区| 亚洲国产精品成人久久综合一区| 久久天天躁夜夜躁狠狠躁2022| 亚洲成人在线网站| 亚洲精品影视| 国产日韩欧美电影在线观看| 久久精品天堂| 免费成人小视频| 一区二区国产在线观看| 亚洲一级二级在线| 黄色综合网站| 亚洲三级毛片| 国产视频一区二区在线观看| 欧美成人精品在线| 国产精品成人aaaaa网站| 久久国产精品网站| 欧美成人自拍视频| 亚洲欧美中文在线视频| 久久久久国产一区二区三区| 日韩视频在线你懂得| 亚洲一区激情| 亚洲日本欧美| 欧美在线电影| 亚洲天堂av在线免费观看| 欧美中文字幕在线播放| 一区二区三区久久网| 久久大香伊蕉在人线观看热2| 亚洲精品国产精品乱码不99| 亚洲综合清纯丝袜自拍| 亚洲毛片在线| 久久精品一区二区国产| 亚洲综合电影一区二区三区| 久久久精品国产免大香伊| 一区二区三区四区五区视频| 久久本道综合色狠狠五月| 亚洲视频一区二区| 美女日韩欧美| 久久亚洲国产精品日日av夜夜| 欧美猛交免费看| 欧美成人在线免费视频| 国产欧美一区二区精品婷婷| 99国产精品久久久久久久久久 | 蜜月aⅴ免费一区二区三区| 亚洲免费一在线| 欧美精品日韩一本| 免费日韩av片| 一区免费在线| 欧美一级艳片视频免费观看| 午夜精品久久久久久久白皮肤| 欧美高清在线精品一区| 欧美成人福利视频| 在线精品一区二区| 久久久99精品免费观看不卡| 欧美在线免费观看亚洲| 国产精品成人va在线观看| 亚洲肉体裸体xxxx137| 亚洲日韩成人| 欧美国产精品va在线观看| 欧美高清自拍一区| 亚洲国产片色| 欧美激情偷拍| 最新精品在线| 一二美女精品欧洲| 国产精品草草| 午夜在线精品偷拍| 久久精品日韩| 亚洲成人自拍视频| 欧美激情精品久久久久久大尺度 | 欧美在线免费观看| 国产日韩欧美综合精品| 欧美一级理论片| 久久综合九色欧美综合狠狠| 伊人天天综合| 欧美成人一区二区| 99re66热这里只有精品4| 亚洲一区二区三区四区视频| 国产精品久久久免费| 欧美一级日韩一级| 欧美韩日精品| 一区二区三区视频在线看| 国产精品成人午夜| 欧美中文字幕第一页| 亚洲成人在线网| 亚洲视频一二区| 国产在线视频欧美| 久热精品视频在线免费观看 | 欧美亚洲网站| 在线观看91精品国产麻豆| 欧美高清视频| 午夜精品福利电影| 欧美国产亚洲另类动漫| 制服丝袜激情欧洲亚洲| 国产欧美日韩精品a在线观看| 欧美在线资源| 99xxxx成人网| 美女视频网站黄色亚洲| 99国产精品久久久| 国产午夜一区二区三区| 农村妇女精品| 午夜一区不卡| 日韩视频在线免费| 毛片基地黄久久久久久天堂| 一本大道久久a久久精二百| 国产婷婷色一区二区三区| 欧美岛国激情| 久久黄色网页| 亚洲素人一区二区| 亚洲级视频在线观看免费1级| 午夜精品在线视频| 99国产一区| 黄色成人91| 国产精品一区二区三区乱码| 欧美激情精品久久久久久大尺度| 性色av一区二区三区| 99精品欧美| 欧美黄色影院| 美女在线一区二区| 久久狠狠亚洲综合| 亚洲欧美一区二区原创| 亚洲精品免费在线播放| 国产在线精品自拍| 国产日本欧洲亚洲| 国产精品久99| 欧美三级视频在线| 欧美激情成人在线视频| 你懂的国产精品永久在线| 久久久久久综合网天天| 午夜亚洲精品| 欧美伊人精品成人久久综合97| 亚洲天堂成人| 亚洲婷婷综合色高清在线| 亚洲乱亚洲高清| 亚洲国产美女| 亚洲高清视频在线观看| 蜜臀久久99精品久久久画质超高清 | 蜜臀99久久精品久久久久久软件| 欧美亚洲一区二区三区| 亚洲欧美经典视频| 亚洲一区二区三区视频| 在线亚洲电影| 亚洲一区视频在线| 亚洲欧美一区在线| 欧美一区二区三区喷汁尤物| 午夜在线成人av| 久久精品国产精品亚洲综合| 欧美伊久线香蕉线新在线| 欧美一区在线视频| 久久亚洲国产精品日日av夜夜| 性欧美8khd高清极品| 久久国产日韩欧美| 久久这里只有精品视频首页| 裸体一区二区| 欧美日韩综合视频| 国产精品视频一二三| 国产一区二区精品在线观看| 激情小说另类小说亚洲欧美| 樱桃国产成人精品视频| 最新中文字幕亚洲| 亚洲夜晚福利在线观看| 欧美一区91| 美女久久一区| 日韩视频在线观看| 午夜天堂精品久久久久| 蜜臀a∨国产成人精品| 欧美视频在线免费| 国内成人在线| 亚洲美女精品成人在线视频| 亚洲女人天堂av| 久久精品一区二区三区四区| 亚洲国产成人精品久久久国产成人一区 | 日韩一级不卡| 午夜伦欧美伦电影理论片| 久久伊人精品天天| 亚洲欧洲一区二区在线观看| 亚洲一区成人| 免费不卡中文字幕视频| 国产精品久久波多野结衣| 红桃视频国产精品| 亚洲一区二区三区在线| 美女精品在线| 亚洲视频精选| 欧美国产在线观看| 国产一区二区三区最好精华液| 亚洲精品一区二区三| 欧美影院视频| 亚洲最新视频在线| 久久亚洲欧美国产精品乐播| 国产精品老牛| 99www免费人成精品| 美女91精品| 亚洲欧美日韩国产一区二区三区| 欧美国产精品专区| 一区二区三区在线免费视频| 亚洲欧美另类在线| 亚洲久久一区| 欧美gay视频|