锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品免费久久,国产精品免费看久久久香蕉,精品999久久久久久中文字幕http://www.shnenglu.com/MiYu/category/14428.html ______________鐧界櫧銇眿zh-cnSun, 24 Oct 2010 12:54:19 GMTSun, 24 Oct 2010 12:54:19 GMT60HDU 1512 HDOJ 1512 Monkey King ( 宸﹀亸鏍?) ACM 1512 IN HDUhttp://www.shnenglu.com/MiYu/archive/2010/10/24/131043.htmlMiYuMiYuSun, 24 Oct 2010 03:43:00 GMThttp://www.shnenglu.com/MiYu/archive/2010/10/24/131043.htmlhttp://www.shnenglu.com/MiYu/comments/131043.htmlhttp://www.shnenglu.com/MiYu/archive/2010/10/24/131043.html#Feedback0http://www.shnenglu.com/MiYu/comments/commentRss/131043.htmlhttp://www.shnenglu.com/MiYu/services/trackbacks/131043.htmlMiYu鍘熷垱, 杞笘璇鋒敞鏄?: 杞澆鑷?nbsp;______________鐧界櫧銇眿    

 

棰樼洰鍦板潃:

http://acm.hdu.edu.cn/showproblem.php?pid=1512

棰樼洰鎻忚堪 :

浠g爜
Monkey King

Time Limit: 
10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 
914    Accepted Submission(s): 426


Problem Description
Once 
in a forest, there lived N aggressive monkeys. At the beginning, they each does things in its own way and none of them knows each other. But monkeys can't avoid quarrelling, and it only happens between two monkeys who does not know each other. And when it happens, both the two monkeys will invite the strongest friend of them, and duel. Of course, after the duel, the two monkeys and all of there friends knows each other, and the quarrel above will no longer happens between these monkeys even if they have ever conflicted.

Assume that every money has a strongness value, which will be reduced to only half of the original after a duel(that 
is10 will be reduced to 5 and 5 will be reduced to 2).

And we also assume that every monkey knows himself. That 
is, when he is the strongest one in all of his friends, he himself will go to duel.
 

Input
There are several test cases, and each 
case consists of two parts.

First part: The first line contains an integer N(N
<=100,000), which indicates the number of monkeys. And then N lines follows. There is one number on each line, indicating the strongness value of ith monkey(<=32768).

Second part: The first line contains an integer M(M
<=100,000), which indicates there are M conflicts happened. And then M lines follows, each line of which contains two integers x and y, indicating that there is a conflict between the Xth monkey and Yth.

 

Output
For each of the conflict, output 
-1 if the two monkeys know each other, otherwise output the strongness value of the strongest monkey in all friends of them after the duel.
 

Sample Input
5
20
16
10
10
4
5
2 3
3 4
3 5
4 5
1 5
 

Sample Output
8
5
5
-1
10
 

 

 

棰樼洰鍒嗘瀽:

/*
Mail to   : miyubai@gamil.com
My Blog   : www.baiyun.me
Link      : http://www.cnblogs.com/MiYu  || http://www.shnenglu.com/MiYu
Author By : MiYu
Test      : 1
Complier  : g++ mingw32-3.4.2
Program   : HDU_1512
Doc Name  : Monkey King
    
    
棰樼洰鎰忔? 

鏈塏鍙尨瀛? 姣忓彧閮芥湁涓涓姏閲忓? 寮濮嬬殑鏃跺欎簰涓嶈璇? 瀹冧滑涔嬮棿浼?xì)鍙戠敓M嬈℃枟浜? 姣忔鍙戠敓a, b鐨勬枟浜夋椂, a, b閮戒細(xì)浠庡悇鑷殑鏈嬪弸鍦堥噷鎷夊嚭涓涓渶寮虹殑, 涔嬪悗涓ゅ彧鐚村瓙鎵? 鎵撳畬鍚庤繖涓ゅ彧鐚村瓙鐨勫姏閲忓煎悇鍑忓崐. 騫朵笖鎵撳畬鍚? 涓ゅ彧鐚村瓙鐨勬湅鍙嬪湀鐨勬墍鏈変漢閮戒簰鐩歌璇?涔熷氨鏄笉浼?xì)鍐嶆?.

浣犵殑浠誨姟灝辨槸瀵逛簬姣忎釜鏂椾簤, 鑻, b鏄湅鍙? 閭d箞杈撳嚭-1, 鍚﹀垯杈撳嚭鎵撳畬鍚庡畠浠殑鏈嬪弸鍦堢殑鏈寮虹尨瀛愮殑鍔涢噺鍊?

 浣跨敤 鏅?浼樺厛闃熷垪鐨勮瘽 浼拌浼?xì)瓒呮? 鍥犱負(fù)鏁版嵁閲忓緢澶?100000 ! !, 絳変笅鏈夌┖璇曡瘯鐪? 

瀵逛簬姣忎竴涓妭鐐? 瀹氫箟dis 琛ㄧずX鑺傜偣鍒版渶鍙寵竟鐨勭┖鑺傜偣鐨勮窛紱葷殑鏈灝忓?/div>

瀵逛簬姣忎釜鑺傜偣X, 瑕佹眰X鐨勫乏鍎垮瓙鐨刣is >= 鍙沖効瀛愮殑dis, 閭d箞瀹規(guī)槗鍙戠幇, 瀵逛簬N涓妭鐐圭殑宸﹀亸鏍? 鍏跺彸鍎垮瓙鏈澶氬彧鏈塴ogN涓妭鐐?

鍚堝茍鎿嶄綔灝辨槸璁╁鏉傚害钀藉湪鍙沖効瀛愪笂, 浠庤岃揪鍒發(fā)ogN鐨勫悎騫跺鏉傚害.

棣栧厛瀵逛簬涓や釜鍫? 鑻ュ叾涓竴涓負(fù)絀? 榪斿洖鍙︿竴涓?

鍚﹀垯(榪欓噷浠ュぇ鏍瑰爢涓轟緥), a鎸囧悜鍫嗛《杈冨ぇ鐨勫爢, b鎸囧悜鍙︿竴涓? 璁゛鐨勫彸鍎垮瓙鍜宐鍚堝茍, 鍚堝茍鍚庣殑瀛愭爲(wèi)浣滀負(fù)a鐨勫彸鍎垮瓙.

鎺ヤ笅鏉? 媯鏌鐨勪袱涓効瀛愭槸鍚︽弧瓚砫is, 涓嶆弧瓚沖氨浜ゆ崲涓や釜鍎垮瓙.

鏈鍚? 鏇存柊a鐨刣is.

榪欐牱灝卞鏄撳疄鐜板爢鐨勫叾浠栨搷浣?( 姣斿鎻掑叆, 鍒犻櫎欏剁瓑 ).

鍙﹀ 榪橀渶瑕佺敤鍒?騫舵煡闆?    
    
    
*/
//#pragma warning( disable:4789 )
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <utility>
#include <queue>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
using namespace std;
const int MM = 100010;
struct left {
        int l,r,dis,val,dad;
} heap[MM];

int N, M;

inline int max ( const int &a, const int &b) {
       return a > b ? a : b;
}

inline int find ( int &x ) {
    return heap[x].dad == x ? x : heap[x].dad = find ( heap[x].dad );
}

inline void swap(int &a, int &b) {
     a ^= b ^= a ^= b;
}

inline int merge ( int x, int y ) {
    if ( x == 0 ) return y;
    if ( y == 0 ) return x;
    if ( heap[y].val > heap[x].val ) swap ( x, y );    
    heap[x].r = merge ( heap[x].r, y );
    heap[heap[x].r].dad = x;
    if ( heap[ heap[x].l ].dis < heap[ heap[x].r ].dis ) 
         swap ( heap[x].l, heap[x].r );
    if ( heap[x].r == 0 ) heap[x].dis = 0;
    else heap[x].dis = heap[ heap[x].r ].dis + 1;
    return x;
}

inline int push ( int x, int y ) {
       return merge ( x, y );       
}

inline int pop ( int &x ) {
       int l = heap[x].l; 
       int r = heap[x].r; 
       heap[l].dad = l;
       heap[r].dad = r;
       heap[x].l = heap[x].r = heap[x].dis = 0;   
       return merge ( l, r );  
}

inline bool scan_d(int &num) {
        char in;bool IsN=false;
        in=getchar();
        if(in==EOF) return false;
        while(in!='-'&&(in<'0'||in>'9')) in=getchar();
        if(in=='-'){ IsN=true;num=0;}
        else num=in-'0';
        while(in=getchar(),in>='0'&&in<='9'){
                num*=10,num+=in-'0';
        }
        if(IsN) num=-num;
        return true;
}

int main() {
    while ( scan_d ( N ) ) {
         for ( int i = 1; i <= N; ++ i ) {
              scan_d ( heap[i].val );
              heap[i].l = heap[i].r = heap[i].dis = 0;
              heap[i].dad = i;    
         }
         scan_d ( M );
         int a, b, x, y;
         while ( M -- ) {
                scan_d (a); scan_d (b);
                x = find ( a );
                y = find ( b ); 
                if ( x == y ) {
                    puts ( "-1" );     
                } else {
                    heap[x].val /= 2;
                    int xx = push ( pop ( x ), x );  
                    heap[y].val /= 2;
                    int yy = push ( pop ( y ), y );  
                    
                    printf ( "%d\n", heap[ merge ( xx, yy ) ].val );      
                }    
         } 
    }
    return 0;
}


 

 

 



MiYu 2010-10-24 11:43 鍙戣〃璇勮
]]> 狠狠色丁香婷婷久久综合五月| 久久99国产综合精品| 久久se精品一区精品二区国产| 久久精品成人免费网站| AAA级久久久精品无码区| 无码人妻久久一区二区三区蜜桃| 久久婷婷色香五月综合激情| 精品熟女少妇av免费久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久WWW免费人成精品| 亚洲国产精品无码久久久久久曰| 色综合久久久久综合体桃花网| 久久精品免费一区二区三区| 污污内射久久一区二区欧美日韩| 久久棈精品久久久久久噜噜| 国产A级毛片久久久精品毛片| 久久婷婷色综合一区二区| 久久久精品久久久久特色影视| 久久久无码人妻精品无码| 亚洲精品tv久久久久| 天天久久狠狠色综合| 奇米综合四色77777久久| 一本色综合久久| 免费一级欧美大片久久网| 久久亚洲欧美日本精品| 国产美女久久精品香蕉69| 亚洲精品无码久久千人斩| 亚洲欧美国产精品专区久久| 精品久久人人爽天天玩人人妻| 久久久一本精品99久久精品66| 精品久久人人爽天天玩人人妻| 久久久国产精品| 国产亚州精品女人久久久久久 | 久久精品视频网| 国内精品久久久久影院免费| 久久久精品人妻一区二区三区蜜桃 | 久久婷婷五月综合色99啪ak| 777久久精品一区二区三区无码| 精品久久久久久无码中文字幕一区 | 久久亚洲精品中文字幕三区| 国产精品久久久久影院嫩草|