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

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ù)雜,表示沒看懂

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

手寫棧 DFS 樹中的每個點,用 map 記錄當前訪問的點到根節(jié)點的所有權(quán)值,用 map 的 upper_bound 求得當前訪問點上的所有詢問的結(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 閱讀(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>
            国产精品久久999| 亚洲激情影视| 亚洲国产精品一区二区尤物区| 欧美韩日一区二区| 国产精品社区| 亚洲免费大片| 99成人在线| 欧美大片18| 欧美激情二区三区| 亚洲国产精品成人综合色在线婷婷| 欧美淫片网站| 久久免费视频观看| 国产一区二区三区高清播放| 亚洲——在线| 欧美中文字幕在线| 国产亚洲一区二区三区| 午夜亚洲福利| 久久夜色精品国产欧美乱| 国产色视频一区| 欧美一级久久久久久久大片| 亚洲男同1069视频| 欧美日韩综合在线免费观看| 亚洲欧洲在线看| 亚洲精品国产精品国自产在线 | 蜜臀av性久久久久蜜臀aⅴ| 欧美一区二区三区四区在线| 国产精品二区在线| 一区二区久久久久| 一区二区三区久久精品| 欧美精品在线一区| 亚洲欧洲美洲综合色网| 亚洲欧洲一区二区在线播放 | 日韩视频免费观看高清在线视频| 国产伦精品一区二区三区免费迷 | 99re亚洲国产精品| 女人天堂亚洲aⅴ在线观看| 欧美xxxx在线观看| 亚洲福利国产| 欧美福利在线| 日韩午夜在线播放| 亚洲欧美日韩国产| 国产精品毛片va一区二区三区 | 亚洲高清影视| a91a精品视频在线观看| 欧美三级黄美女| 国产精品99久久久久久有的能看| 亚洲大片免费看| 久久天堂国产精品| 麻豆精品视频在线| 亚洲福利视频一区| 免费视频一区| 亚洲激情电影在线| 一本色道久久综合| 国产精品素人视频| 久久精品在这里| 亚洲国产女人aaa毛片在线| 日韩一级大片在线| 国产精品女人毛片| 久久久久久91香蕉国产| 91久久午夜| 午夜国产精品视频免费体验区| 国产午夜精品久久| 性色av香蕉一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 91久久国产综合久久蜜月精品 | 久久久久成人网| 91久久久久久久久| 国产精品高潮视频| 久久九九热re6这里有精品| 亚洲国产欧美一区| 欧美一区二区高清| 亚洲精品美女久久久久| 国产精品久久久久秋霞鲁丝| 久久久国产一区二区| 亚洲青色在线| 久久色在线播放| 一本久道久久综合婷婷鲸鱼| 国内成+人亚洲| 欧美日韩亚洲三区| 久久免费视频网| 亚洲精品一区二区三区不| 欧美一区二区三区精品| 亚洲激情在线视频| 一区二区三区在线免费播放| 欧美日本中文| 久久另类ts人妖一区二区| 中文久久乱码一区二区| 亚洲国产精品免费| 久久久久久欧美| 亚洲欧美视频一区| 日韩午夜剧场| 亚洲国产精品va在线看黑人动漫 | 欧美成人官网二区| 欧美在线观看一区| 一区二区免费看| 亚洲国产精品视频一区| 久久综合久久综合这里只有精品| 亚洲视频在线视频| 99日韩精品| 91久久综合| 在线观看视频欧美| 韩日精品视频一区| 欧美日韩在线不卡| 另类欧美日韩国产在线| 久久婷婷国产综合国色天香| 亚洲在线视频| 亚洲一二三级电影| 99xxxx成人网| 日韩午夜激情电影| av72成人在线| 99亚洲伊人久久精品影院红桃| 亚洲福利电影| 亚洲国产成人av在线| 欧美黄色成人网| 欧美chengren| 欧美国产亚洲另类动漫| 欧美成人一品| 欧美.日韩.国产.一区.二区| 欧美96在线丨欧| 欧美jizzhd精品欧美巨大免费| 美女视频黄a大片欧美| 欧美不卡视频一区| 亚洲风情亚aⅴ在线发布| 欧美国产综合视频| 男人的天堂亚洲| 亚洲福利视频一区二区| 亚洲国产欧美在线人成| 9人人澡人人爽人人精品| 亚洲一区在线看| 午夜视频久久久| 久久精品盗摄| 毛片一区二区| 欧美日韩四区| 国产精品一区二区三区久久| 国产精品日韩欧美| 在线观看国产日韩| 最新亚洲电影| 亚洲天堂成人在线观看| 欧美一级播放| 美女网站久久| 亚洲精品在线免费观看视频| 亚洲午夜激情网页| 久久精品视频一| 欧美激情一区二区在线| 国产精品青草综合久久久久99| 国产日韩亚洲欧美精品| 亚洲激情不卡| 午夜精品剧场| 免费在线国产精品| 日韩亚洲国产欧美| 久久高清免费观看| 六月天综合网| 国产欧美 在线欧美| 91久久视频| 久久aⅴ乱码一区二区三区| 欧美成人一区二区| 亚洲素人一区二区| 久久久免费观看视频| 欧美色综合网| 亚洲国产成人av在线| 亚洲无线一线二线三线区别av| 久久久久久9999| 99精品免费| 裸体歌舞表演一区二区| 国产精品亚洲一区二区三区在线| 亚洲国产小视频在线观看| 香蕉亚洲视频| 亚洲精品国产系列| 亚洲色图自拍| 蜜桃av噜噜一区二区三区| 欧美性久久久| 亚洲精品国产欧美| 久久免费一区| 亚洲伊人网站| 欧美另类在线观看| 在线观看欧美日本| 欧美在线观看视频一区二区| aa级大片欧美三级| 欧美激情2020午夜免费观看| 经典三级久久| 久久久xxx| 亚洲一区二区三区高清| 欧美日韩日日骚| 国产日韩在线一区| 日韩一级大片在线| 亚洲国产一区在线观看| 久久久国产一区二区| 国产亚洲欧洲一区高清在线观看 | 久久精品国产精品亚洲综合| 一区二区三区 在线观看视| 欧美激情在线狂野欧美精品| 亚洲第一在线综合在线| 久久久午夜电影| 小黄鸭精品aⅴ导航网站入口| 欧美午夜久久| 亚洲欧美日韩天堂| 制服诱惑一区二区| 国产精品美女久久久久av超清| 中文在线一区| 一区二区三区视频在线观看|