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

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上的題解,好復(fù)雜,表示沒(méi)看懂

這個(gè)解法好簡(jiǎn)單,謝謝 Topsky 的指點(diǎn),表示 YM

手寫(xiě)棧 DFS 樹(shù)中的每個(gè)點(diǎn),用 map 記錄當(dāng)前訪(fǎng)問(wèn)的點(diǎn)到根節(jié)點(diǎn)的所有權(quán)值,用 map 的 upper_bound 求得當(dāng)前訪(fǎng)問(wèn)點(diǎn)上的所有詢(xún)問(wèn)的結(jié)果,DFS 結(jié)束后一起輸出結(jié)果。


  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 閱讀(1106) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 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>
            精品成人国产在线观看男人呻吟| 国产专区精品视频| 欧美日韩国产精品一区二区亚洲| 欧美成人日本| 欧美精品久久久久久久久老牛影院| 欧美成人午夜激情视频| 欧美成年人视频网站| 欧美激情一区二区三区在线视频观看| 欧美va亚洲va国产综合| 欧美区高清在线| 欧美视频一区二区三区在线观看| 欧美视频精品在线观看| 欧美视频一区二区三区…| 国产精品色一区二区三区| 国产自产在线视频一区| 在线观看日韩av先锋影音电影院| 亚洲精品国产拍免费91在线| 日韩午夜电影在线观看| 亚洲一区中文| 久久久久久色| 亚洲电影免费| 在线亚洲成人| 久久久91精品国产一区二区精品| 蜜桃av一区二区三区| 欧美日韩一级黄| 国产一区二区三区av电影| 在线观看91精品国产麻豆| 日韩小视频在线观看| 亚洲男人av电影| 麻豆91精品| 亚洲人成免费| 香蕉视频成人在线观看| 久久综合色天天久久综合图片| 欧美精品一区三区| 国产精品一区二区久激情瑜伽| 在线观看一区视频| 亚洲午夜黄色| 久久一区二区三区av| 亚洲人成网站999久久久综合| 亚洲一区二区高清视频| 狼人社综合社区| 欧美性理论片在线观看片免费| 黄色亚洲在线| 亚洲综合丁香| 欧美成人一区二区三区| 亚洲视频在线观看网站| 欧美11—12娇小xxxx| 国产精品夜夜夜| 91久久亚洲| 久久精品99国产精品| 亚洲精品国久久99热| 久久久天天操| 国产精品人人爽人人做我的可爱 | 香蕉免费一区二区三区在线观看 | 国产精品国内视频| 亚洲激情电影在线| 欧美一区2区三区4区公司二百| 欧美国产日本在线| 午夜视频久久久| 欧美日韩亚洲国产精品| 1024日韩| 久久亚洲综合色一区二区三区| 99精品黄色片免费大全| 久热精品视频在线观看一区| 国产亚洲欧美激情| 亚洲一区黄色| 亚洲乱码一区二区| 女人香蕉久久**毛片精品| 国产一区二区视频在线观看| 亚洲综合不卡| 亚洲精选一区二区| 欧美va亚洲va日韩∨a综合色| 国产性做久久久久久| 午夜精品久久久久| 亚洲美女精品久久| 欧美精品久久99久久在免费线| 伊人久久大香线| 久久手机免费观看| 欧美一区二区三区四区视频| 国产精品v一区二区三区| 一区二区国产日产| 亚洲精品免费在线| 欧美激情一区| 亚洲乱码国产乱码精品精 | 久久精彩视频| 亚洲综合社区| 国产精品黄视频| 亚洲一区网站| 一区二区三区视频观看| 欧美日韩亚洲在线| 亚洲午夜精品网| 99精品国产福利在线观看免费| 女女同性精品视频| 亚洲精品午夜| 亚洲日本中文| 欧美日韩大陆在线| 亚洲图片欧洲图片av| 亚洲毛片在线| 欧美午夜精品伦理| 亚洲综合视频一区| 午夜精品久久久久久久蜜桃app| 国产精品三级视频| 欧美一区二区三区在线观看视频| 亚洲综合二区| 国产一区二区福利| 久久综合久久综合久久综合| 久久国产精品一区二区三区| 一区二区三区在线观看国产| 麻豆乱码国产一区二区三区| 久久青青草综合| 亚洲日韩欧美视频一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美影院久久久| 久久国产精品色婷婷| 亚洲第一级黄色片| 亚洲精品日韩激情在线电影| 国产精品地址| 久久亚洲春色中文字幕| 久久综合久久久久88| 亚洲人被黑人高潮完整版| 9久草视频在线视频精品| 国产精品免费看久久久香蕉| 久久久噜久噜久久综合| 女仆av观看一区| 亚洲一区二区精品视频| 欧美一区二区三区在线观看| 亚洲国产精品久久精品怡红院| 亚洲久久成人| 国产日韩在线亚洲字幕中文| 亚洲成人资源| 国产精品电影网站| 久久阴道视频| 欧美日韩一区二区免费在线观看| 欧美一区二区三区婷婷月色 | 午夜视频在线观看一区二区| 激情综合中文娱乐网| 亚洲久久视频| 国内外成人免费激情在线视频网站| 欧美国产大片| 国产伦精品一区二区三区免费| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美伦理在线观看| 久久精品视频免费播放| 欧美国产先锋| 久久久久久999| 欧美美女福利视频| 久久久噜噜噜| 欧美性猛交99久久久久99按摩| 免费成人av资源网| 国产精品vip| 欧美激情一区二区久久久| 国产精品社区| 91久久线看在观草草青青| 国产日韩精品电影| 99国产一区| 亚洲人成网在线播放| 欧美一区亚洲一区| 亚洲一区二区三区四区五区黄| 美日韩精品免费观看视频| 香蕉久久夜色精品国产使用方法 | 免费视频一区| 国产精品伊人日日| 亚洲精品免费一二三区| 一区二区在线观看av| 亚洲永久在线观看| 99精品欧美| 老巨人导航500精品| 久久er精品视频| 欧美视频你懂的| 亚洲国产视频直播| 在线观看视频一区二区欧美日韩| 亚洲综合大片69999| 一区二区三区免费网站| 久久一区二区三区超碰国产精品| 久久超碰97人人做人人爱| 国产精品久久午夜夜伦鲁鲁| 亚洲欧洲精品天堂一级| 亚洲成人资源| 久久久精彩视频| 久久久久久久综合狠狠综合| 国产精品一级二级三级| 中文日韩在线| 亚洲一区3d动漫同人无遮挡| 欧美另类综合| 亚洲人成网站在线播| 亚洲日本中文字幕区| 美国十次成人| 欧美第一黄色网| 伊人久久男人天堂| 久久久国产视频91| 久久久亚洲影院你懂的| 国产欧美日韩伦理| 亚洲女同精品视频| 午夜在线精品| 国产精品综合色区在线观看| 亚洲免费视频成人| 久久国产精品网站| 国产亚洲人成a一在线v站| 午夜精品偷拍| 老鸭窝亚洲一区二区三区|