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

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)前訪問(wèn)的點(diǎn)到根節(jié)點(diǎn)的所有權(quán)值,用 map 的 upper_bound 求得當(dāng)前訪問(wèn)點(diǎ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 閱讀(1101) 評(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>
            欧美一区二区三区免费看| 欧美在线视频网站| 欧美日韩性视频在线| 亚洲图片激情小说| 亚洲自拍偷拍麻豆| 国产午夜精品美女毛片视频| 欧美在线观看一区二区| 亚洲欧美日产图| 影音先锋久久久| 亚洲国产精品久久精品怡红院| 欧美波霸影院| 亚洲午夜一二三区视频| 亚洲综合首页| 亚洲高清不卡在线观看| 亚洲日韩欧美视频| 国产精品一区二区三区久久久| 久久福利视频导航| 日韩视频中文字幕| 一个人看的www久久| 国产美女一区二区| 欧美1级日本1级| 欧美日韩高清免费| 久久久久国产一区二区三区| 牛牛国产精品| 性色一区二区三区| 免费视频最近日韩| 亚洲女性喷水在线观看一区| 久久精品国产一区二区三| 91久久一区二区| 亚洲影院在线| 亚洲精品麻豆| 欧美一区二区三区在线看| 亚洲人成人99网站| 午夜精品在线| 一本综合精品| 美国成人直播| 久久另类ts人妖一区二区 | 欧美一区综合| 欧美国产日产韩国视频| 久久精品国产久精国产思思| 欧美激情第三页| 久久这里只精品最新地址| 欧美视频在线观看免费网址| 欧美成人福利视频| 国产精自产拍久久久久久| 亚洲激情二区| 亚洲福利小视频| 欧美中文在线观看| 午夜国产精品视频免费体验区| 欧美成人午夜影院| 免费成人网www| 国精品一区二区| 亚洲欧美国产精品va在线观看 | 国产精品青草久久| 91久久线看在观草草青青| 在线看视频不卡| 久久丁香综合五月国产三级网站| 亚洲一区二区三区色| 欧美精品色一区二区三区| 欧美高清自拍一区| 在线成人av| 久久精品国产精品亚洲精品| 久久国产精品高清| 国产伦精品一区二区三区视频黑人 | 亚洲欧洲精品一区二区三区波多野1战4 | 欧美激情久久久| 在线观看视频亚洲| 久久综合色影院| 欧美激情视频在线播放| 一区二区视频免费完整版观看| 香蕉乱码成人久久天堂爱免费 | 中文国产成人精品久久一| a4yy欧美一区二区三区| 欧美激情精品久久久久久免费印度| 免费不卡视频| 亚洲人成7777| 欧美激情日韩| 日韩亚洲欧美在线观看| 亚洲欧美日韩国产成人| 国产精品自拍视频| 欧美伊人久久久久久久久影院| 久久综合给合| 99视频在线观看一区三区| 欧美午夜在线一二页| 亚洲综合社区| 欧美成人免费小视频| 亚洲精品久久久蜜桃| 欧美日韩综合网| 性欧美办公室18xxxxhd| 欧美刺激午夜性久久久久久久| 亚洲人成网站在线播| 国产精品99免费看 | 亚洲一区二区免费在线| 国产欧美精品va在线观看| 久久精品人人爽| 亚洲精品乱码久久久久久黑人| 亚洲一区二区三区在线视频| 国产欧美日韩91| 欧美高清视频一区二区| 亚洲欧美国产精品va在线观看| 老鸭窝毛片一区二区三区| 日韩视频免费| 国产亚洲欧美一区二区| 免费观看久久久4p| 亚洲一区网站| 欧美激情中文字幕一区二区| 亚洲在线视频一区| 精品动漫3d一区二区三区免费版| 欧美精品久久久久久久免费观看| 亚洲在线一区| 亚洲黄色毛片| 久久视频在线免费观看| 99日韩精品| 国内精品久久久久久| 欧美黄色一区二区| 久久久青草婷婷精品综合日韩| 亚洲啪啪91| 噜噜噜噜噜久久久久久91| 一区二区三区国产盗摄| 亚洲国产欧美国产综合一区 | 一个人看的www久久| 激情成人综合| 国产农村妇女精品一二区| 欧美二区不卡| 老色鬼久久亚洲一区二区| 亚洲制服丝袜在线| 一本色道久久综合狠狠躁篇怎么玩| 久热精品视频在线观看| 亚洲欧美不卡| 亚洲自拍偷拍一区| aa级大片欧美| 亚洲精品之草原avav久久| 亚洲第一福利社区| 国产一区香蕉久久| 国产精品美腿一区在线看| 欧美日韩在线观看一区二区| 欧美国产日本在线| 欧美bbbxxxxx| 免费日韩一区二区| 欧美+日本+国产+在线a∨观看| 久久久99久久精品女同性 | 欧美成人黄色小视频| 久久久九九九九| 久久精品在线视频| 久久精选视频| 久久久另类综合| 久久在线免费| 免费观看在线综合| 欧美成人国产| 亚洲黑丝在线| 亚洲免费黄色| 国产精品99久久久久久久久久久久 | 亚洲国产精品va| 亚洲日韩欧美视频一区| 亚洲免费一区二区| 亚洲一二三四区| 午夜亚洲性色福利视频| 欧美一区在线看| 蜜桃精品久久久久久久免费影院| 久久中文字幕一区二区三区| 免费亚洲电影在线观看| 欧美日韩成人一区二区| 欧美日韩一二三区| 国产精品伦一区| 精品不卡一区二区三区| 亚洲国产精品第一区二区| 99亚洲一区二区| 亚洲欧美日韩国产中文| 久久精品国产99精品国产亚洲性色| 久久久久一区二区三区四区| 欧美大片免费观看在线观看网站推荐| 亚洲国产精品一区二区www在线 | 美日韩在线观看| 91久久精品视频| 亚洲免费视频在线观看| 老司机一区二区| 欧美色大人视频| 激情六月婷婷久久| 在线中文字幕日韩| 久久久国产视频91| 亚洲欧洲另类国产综合| 中文日韩在线视频| 久久久久久久久综合| 欧美三级日本三级少妇99| 国模私拍视频一区| 亚洲天堂免费在线观看视频| 久久久夜色精品亚洲| 日韩一级免费观看| 久久国产婷婷国产香蕉| 欧美午夜精品理论片a级按摩 | 欧美日韩第一区| 国产亚洲欧洲997久久综合| 亚洲免费观看高清完整版在线观看| 午夜精品成人在线| 亚洲激情亚洲| 久久久久久色| 国产嫩草影院久久久久 | 在线观看亚洲a| 欧美尤物一区| 亚洲免费高清视频|