锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合久久自在自线精品自,久久精品二区,狠狠色婷婷久久一区二区http://m.shnenglu.com/keroro/category/20530.htmlzh-cnFri, 31 May 2013 07:20:59 GMTFri, 31 May 2013 07:20:59 GMT60宸垎綰︽潫http://m.shnenglu.com/keroro/archive/2013/05/31/200711.html絎ㄨ泲渚︽帰絎ㄨ泲渚︽帰Fri, 31 May 2013 03:25:00 GMThttp://m.shnenglu.com/keroro/archive/2013/05/31/200711.htmlhttp://m.shnenglu.com/keroro/comments/200711.htmlhttp://m.shnenglu.com/keroro/archive/2013/05/31/200711.html#Feedback0http://m.shnenglu.com/keroro/comments/commentRss/200711.htmlhttp://m.shnenglu.com/keroro/services/trackbacks/200711.html宸垎綰︽潫(difference constraints)錛屽錛屼袱涓叧閿瓧瑕佺悊瑙eソ錛?#8220;difference”綆鍗曠悊瑙e氨鏄袱涓妭鐐圭殑“宸?#8221;錛屽搴旂殑灝辨槸鍥句腑鐨勮竟鏉冿紝鑰?#8220;綰︽潫”瀵瑰簲鐨勬槸鍥劇殑杈廣傝繖涓浘鐨勮竟鏉冧笉涓瀹氶兘鏄鏁幫紝涔嬪墠鎴戜竴鐩村緢濂囨負浠涔堝仛鏈鐭礬鐨勬椂鍊欏垵濮嬪寲dis[]涓轟簡0涔熷彲浠ワ紝閭f槸鍥犱負鎴戞病鎰忚瘑鍒拌竟鏉冨彲浠ヤ負璐熸暟錛岃屾濈淮瀹氬娍鍦版兂鍒濆鍖杁is[]涓?錛岄偅0涓嶅氨鏄渶灝忚礬寰勪簡鍚楋紝浣嗚繖閲屽樊鍒嗙害鏉熺殑鏈鐭礬寰勫父甯告槸璐熸暟鐨勶紝鎵浠ユ渶鐭礬寰勫彲浠ヤ笉鏄?錛侊紒
鐪嬬綉涓婅瑙g殑鏃跺欒灝忓績錛屽緢澶氫漢鎶婃渶闀胯礬鍜屾渶鐭礬鏄笉鍒嗙殑錛屼貢姝諱簡銆?/div>
榪樻湁寰堥噸瑕佺殑涓鐐瑰緢澶氫漢娌″尯鍒嗗紑錛?/div>
    姹傛渶灝忓彲琛岃В ==> 鎶婁笉絳夊紡鍒掍負dv >= dx + Z鐨勫艦寮忥紝鍗沖緩绔?lt;u,v,Z>杈?==> 鍙瑙h鏈灝忥紝鍏跺疄灝辨槸鍙栫害鏉熸潯浠朵腑`鏈澶鐨勭害鏉?==> 姹傛渶闀胯礬
    瑙i噴錛氫負浠涔堟眰鏈灝忓彲琛岃В瑕佸垝鎴恉v >= dx + Z褰㈠紡錛熷洜涓鴻繖涓艦寮忔殫鎸囦簡“璁ヾv灝介噺灝?#8221;錛屽洜涓烘鍒籨v鐨勫彇鍊煎尯闂翠負[du+Z, ∞]銆?/div>
          涓轟粈涔堝彲琛岃В鏈灝忥紝鍗蟲剰鍛崇潃鍙栨渶澶х害鏉熸潯浠訛紵榪欐牱鎯籌紝濡傛灉鏈塪v >= du + Z1, dv >= du + Z2錛?Z1<Z2)錛岄偅dv鐨勬渶灝忓彇鍊煎氨鏄痙u+Z2錛屽洜涓篸u+Z1涓嶆弧瓚崇浜屼釜綰︽潫鏉′歡銆?/div>
          鏈鍚庝竴姝ュ氨濂界悊瑙d簡錛屽洜涓哄緩鍥劇殑杈規潈灝辨槸綰︽潫鍊鹼紝鏃㈢劧涓婁竴姝ユ寚瑕佸彇鏈澶х害鏉燂紝閭e綋鐒舵槸姹傛渶闀胯礬鍟︺?/div>
          緗戜笂寰堝璁茶В娌℃湁鍖哄垎寮鎵璋撶殑鏈澶?鏈灝忥紝涓浼氬効鎸囧彲琛岃В鐨勬渶錛屼竴浼氬効鎸囩害鏉熸潯浠剁殑鏈錛屽紕寰楁垜涔變簡濂戒箙銆?/div>
  欏轟究璐翠竴涓嬶細
    姹傛渶澶у彲琛岃В ==> 鎶婁笉絳夊紡鍒掍負dv <= dx + Z鐨勫艦寮忥紝鍗沖緩绔?lt;u,v,Z>杈?==> 鍏跺疄灝辨槸鍙栫害鏉熸潯浠朵腑`鏈灝廯綰︽潫 ==> 姹傛渶鐭礬
    鍏充簬婧愮偣錛氬緢澶氭椂鍊欓澶栦環鏍兼簮鐐瑰彲浠ュ府鎴戜滑鎶婁竴涓潪榪為氬浘鍙樻垚榪為氬浘錛岃屽浜庢簮鐐圭殑涓嶇瓑寮忥紝涓瀹氳鍜屼綘涔嬪墠寤鴻竟鏃剁殑涓嶇瓑寮忓艦寮忎竴鏍鳳紝濡傛灉涔嬪墠鏄痙v >= du + Z錛岄偅婧愮偣涔熻dv >= d0 + xxx銆傝繖涓獂xx灝辨槸dis[]鐨勫垵濮嬪鹼紝鍏充簬濡備綍閫夊彇xxx錛屼笅闈袱鍙ヨ瘽鎽樿嚜鐧懼害鐧劇錛?/div>
    “
     1.濡傛灉灝嗘簮鐐瑰埌鍚勭偣鐨勮窛紱誨垵濮嬪寲涓?錛屾渶緇堟眰鍑虹殑鏈鐭礬婊¤凍 瀹冧滑涔嬮棿鐩鎬簰鏈鎺ヨ繎浜?/div>
     2.濡傛灉灝嗘簮鐐瑰埌鍚勭偣鐨勮窛紱誨垵濮嬪寲涓篒NF(鏃犵┓澶?錛屽叾涓箣1涓?錛屾渶緇堟眰鍑虹殑鏈鐭礬婊¤凍 瀹冧滑涓庤鐐逛箣闂寸浉浜掑樊鍊兼渶澶с?/div>
    ”
    宸垎綰︽潫棰樼洰鎴戜竴鑸槸鐢⊿PFA+鏍堬紝涓轟粈涔堜笉鐢╠ijkstra+heap錛熷洜涓篸ijkstra涓嶈兘澶勭悊璐熺幆錛岃屾垜浠殑棰樼洰鍙兘鏈夎礋鐜紝鎵浠ュ共鑴嗛兘鐢⊿PFA浜嗭紝澶氭暟鏉′歡涓嬶紝鐢╯tack鐨凷PFA姣旂敤queue鐨勫揩錛寃hy錛熷洜涓哄父甯稿湴錛岀敤鏈鍏堟洿鏂頒簡鐨勭偣鍘繪洿鏂板叾瀹冪偣錛屾晥鏋滄瘮鐢ㄤ互鍓嶅凡緇忔洿鏂頒簡鐨勭偣(鍦╭ueue鐨則ail)濂姐?/div>
宸垎綰︽潫涓撻錛歨ttp://972169909-qq-com.iteye.com/blog/1185527
poj 1201  宸垎綰︽潫
棰樻剰錛氭眰絎﹀悎棰樻剰鐨勬渶灝忛泦鍚圸鐨勫厓绱犱釜鏁幫紝綰︽潫鏉′歡:i j C錛岃〃鍖洪棿[i,j]鑷沖皯鏈塁涓猌闆嗗悎鐨勫厓绱犮?/div>
闅愬惈鏉′歡鏄紝S鍖洪棿鏄釜榪炵畫鐨勬暟瀛楀尯闂達紝0 <= s[i+1] - s[i] <= 1錛屽叾涓璼[i]琛?~i涓湁澶氬皯鏁板瓧鏄痁闆嗗悎鍏冪礌銆備笅闈㈡槸闅愬惈鏉′歡鐨勫緩杈廣?/div>
    for(int i = 0; i < 50001; i++) {    //@
        vert[i].push_back(i+1); edge[i].push_back(0);
        vert[i+1].push_back(i); edge[i+1].push_back(-1);
    }
poj 1364  宸垎綰︽潫
棰樻剰錛氱害鏉熸潯浠訛細i, n, op, K --> op鍒唃reater鍜宭ess錛岄渶瑕佹弧瓚砈i + S[i+1] + S[i+2] + ... + S[i+n] > K 錛堟垨灝忎簬錛?/div>
鍥犱負鎴戞槸鐢╠is[i]琛ㄧずS0+S1+...+Si鐨勫拰錛屾墍浠?lt;u,v,w>搴旇琛ㄧず鐨勬剰鎬濇槸sum[v]-sum[u-1] = w錛屾墍浠ヨ繖閲?涔熸槸涓涓偣錛屾墍浠ユ簮鐐逛笉鑳藉彇0錛?/div>
//@ ?? 鎴戝湪SPFA鍚庨潰杈撳嚭浜哾is[]鏁扮粍鏉ョ湅錛岃繖浜涘煎茍涓嶇鍚堥鐩殑瑕佹眰錛岄偅涓轟粈涔堟暣涓▼搴忔槸瀵圭殑錛熷鏋滆杈撳嚭涓涓В鐨勮瘽鎬庝箞鍐欙紵
    絳旓細鍥犱負榪欓噷鐨刣is[i]琛ㄧず鐨勬槸s1+s2+...+si鐨勫拰錛岀敤絎竴涓牱渚嬫潵璇達紝
    sample input:
        4 2
        1 2 gt 0
        2 2 lt 2
    杈撳嚭鐨刣is[0--n] : -1 0 0 0 0
    s1+s2+s3 = sum[3] - sum[1-1] = dis[3] - dis[0] = 1 , 婊¤凍gt 0
    s2+s3+s4 = sum[4] - sum[2-1] = dis[4] - dis[1] = 0 , 婊¤凍lt 2
    鎵浠ワ紝{si}鐨勪竴緇勮В搴旇涓?,1,0,0,0.
poj 1983    宸垎綰︽潫
棰樻剰錛氱粰鍑轟袱縐嶇害鏉熸潯浠訛紝涓縐嶆槸P A B X錛屾剰涓虹簿紜湴綰︽潫A姣擝榪淴涓崟浣嶏紱鍙︿竴縐峍 A B錛屾剰涓烘ā緋婂湴綰︽潫A鑷沖皯姣擝榪?涓崟浣嶃傛槸鍚︽湁鍙瑙o紵
濂界偣錛氫袱縐嶇害鏉熸潯浠訛紝鍏朵腑Precise綰︽潫鍙互杞崲涓篨 <= A-B <= X
      鏈塚 i i 榪欑鏁版嵁錛岃繖縐嶆暟鎹湪SPFA閲屼細WA錛屽湪ballman_ford閲孉C錛屼笉榪囬澶勭悊涓涓嬪氨鍙互浜嗭紝榪樻槸鐢⊿PFA.
hdu 3666  宸垎綰︽潫
棰樻剰錛氱粰鍑虹煩闃祘Cij}錛岄棶鏄惁瀛樺湪鏁板垪{A} 鍜?{B}錛屼嬌寰楀浜庣煩闃靛唴鎵鏈塜ij婊¤凍: L <= Xij * Ai / Bj <= U 
鏋勫浘銆傜敤log鎶婁箻闄ゅ彉鎴愬姞鍑忥紝灝卞彲浠ュ樊鍒嗙害鏉熸潵鍋氫簡銆傛垜鐢ㄧ殑鏄疭PFA+stack姹傛渶鐭礬錛屾渶闀胯礬搴旇涔熸槸鍙互鐨勩傛病鏈夊緩婧愮偣錛岀洿鎺ヤ竴寮>濮嬫妸鎵鏈夌偣push榪涘幓...  14xx ms 榪囨尯闄╃殑~


]]>鏌ュ垎綰︽潫 poj 3159 http://m.shnenglu.com/keroro/archive/2013/05/28/200649.html絎ㄨ泲渚︽帰絎ㄨ泲渚︽帰Tue, 28 May 2013 07:51:00 GMThttp://m.shnenglu.com/keroro/archive/2013/05/28/200649.htmlhttp://m.shnenglu.com/keroro/comments/200649.htmlhttp://m.shnenglu.com/keroro/archive/2013/05/28/200649.html#Feedback0http://m.shnenglu.com/keroro/comments/commentRss/200649.htmlhttp://m.shnenglu.com/keroro/services/trackbacks/200649.html涓嬮潰鏄疶LE浠g爜錛岀暀綰康銆?br />
#include <string.h>
#include <stdio.h>
#include <vector>
using namespace std;
int n, m;
int dis[30001];
bool visit[30001];
int S[30001], S_top = 0;
vector<int> vert[30001], edge[30001];
void dijkstra(int s);
int main()
{
    int u,v,w;
    scanf("%d%d", &n, &m);
    for(int i = 0; i < m; i++) {
        scanf("%d%d%d", &u, &v, &w);
        vert[u].push_back(v);
        edge[u].push_back(w);
    }
    dijkstra(1);    //鏈闀胯礬-----涓嶆槸鐨勶紝鏄渶鐭礬錛?/span>
    printf("%d\n", dis[n]);
}
void dijkstra(int s)
{
    memset(dis, 127, sizeof(dis));
    dis[s] = 0;
    visit[s] = true;
    S[++S_top] = s;
    while(S_top > 0) {
        int u = S[S_top--];
        visit[u] = false;
        for(int Size = vert[u].size(), i = 0; i < Size; i++) {
            int v = vert[u][i];
            if(dis[v] > dis[u] + edge[u][i]) {
                dis[v] = dis[u] + edge[u][i];
                if(visit[v] == false) {
                    S[++S_top] = v;
                    visit[v] = true;
                }
            }
       }
   }
}


]]>
hdu 2433http://m.shnenglu.com/keroro/archive/2013/05/27/200622.html絎ㄨ泲渚︽帰絎ㄨ泲渚︽帰Mon, 27 May 2013 09:56:00 GMThttp://m.shnenglu.com/keroro/archive/2013/05/27/200622.htmlhttp://m.shnenglu.com/keroro/comments/200622.htmlhttp://m.shnenglu.com/keroro/archive/2013/05/27/200622.html#Feedback0http://m.shnenglu.com/keroro/comments/commentRss/200622.htmlhttp://m.shnenglu.com/keroro/services/trackbacks/200622.html/*
    鏈鐭礬  濂介
    
    棰樻剰錛氱粰鍑鴻竟寤哄浘錛岀劧鍚庡垎鍒垹闄ゅ悇鏉¤竟錛岄棶姣忎竴嬈″垹杈瑰悗鐨勬墍鏈夌鐐圭殑涓や袱鏈鐭礬涔嬪拰錛岃嫢鏈変竴瀵圭鐐逛笉榪為氾紝鍒欒繑鍥濱NF
    鎬濊礬錛氭毚鍔涜В娉曟槸姣忔鍒犺竟鍚庨兘鏉嬈℃渶鐭礬銆傝繖閲岄潰鐨勫啑浣欏氨鏄垹闄ょ殑杈瑰茍涓嶅獎鍝嶄竴浜涚偣鐨勬渶鐭礬鏍戯紝鎵浠ヨ繖浜涚偣鍙互涓嶇敤鍦ㄥ垹杈瑰悗閮芥潵嬈ijkstra>銆傛爣紼嬭В娉曞氨鏄湪鏆村姏瑙f硶涓婂姞涓婁竴浜涘壀鏋濄傚厛棰勫鐞嗗嚭鎵鏈夌偣鐨勬渶鐭礬鏍戯紝璁皒鐨勬渶鐭礬鏍戠殑鍜屼負sum[x]銆傜幇鍦ㄦ潵鍘繪帀鍐椾綑錛氬湪棰勫鐞嗘椂鐢╱sed[x][u][v]璁板綍鐐箈鐨勬渶鐭礬鏍戞槸鍚︾敤鍒頒簡杈箄--v錛屽垯鍒犻櫎杈箄--v鐨勬椂鍊欙紝鍒ゆ柇鐐箈鐨勬渶鐭礬鏍戞槸鍚︾敤鍒拌竟u--v鐨勶紝鑻ョ敤鍒幫紝鍒欏x鍋氫竴嬈ijkstra錛岀敤鏂扮殑sum[x]琛ㄧず>褰撳墠鏈鐭礬鏍戯紱鍚﹀垯鐢ㄩ澶勭悊鐨剆um[x]灝卞彲浠ワ紝涓嶇敤鍐峝ijkstra.
    dijkstra鏄埄鐢╜杈規潈涓?`榪欎竴鐗規ф潵鍔犲揩鐨勭増鏈紝鍏蜂綋鐪?http://m.shnenglu.com/keroro/archive/2013/05/27/200621.html
    榪欓亾棰樻湁寰堝閲嶈竟錛岃繖浼拌涔熸槸鑰冪偣涔嬩竴錛屼笉濂藉ソ澶勭悊閲嶈竟鐨勮瘽浼氳秴鏃躲?/div>


    澶氭暟棰樿В鏄敊鐨勶紝鍥犱負hdu涓婄殑榪欓亾棰樼殑鏁版嵁姣旇緝姘存墠鍙互榪囷紝鍙互璇曡瘯discuss閲岀粰鐨勬暟鎹紝涓嬮潰榪欏嚑涓瑙f瘮杈冮潬璋便?/div>
    http://blog.csdn.net/nash142857/article/details/8253913
    http://www.cnblogs.com/crisxyj/archive/2013/03/10/2952396.html
    http://hi.baidu.com/novosbirsk/item/bfcf0cd201edfc2d39f6f709
    涓や喚浠g爜鐨勬濇兂鏄畬鍏ㄤ竴鏍風殑錛屽彧鏄?#8220;baidu blog”閭d喚鐢╳[i][e]鏉ュ垽鏂璱鐨勬渶鐭礬鏍戞槸鍚﹀寘鎷竟e錛岃宑nblog鐨勯偅浠芥槸鐢╱sed[x][u][v]鏉ュ垽鏂竟u-->v鏄惁xxx.
*/

#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <deque>
using namespace std;
#define     MAXN    101
#define     INF     99999999
#define     debug   printf("!\n")
struct Edge { int u,v; } edge[3001];
vector<int> vertex[MAXN];
int visit[MAXN], sum[MAXN], cnt[MAXN][MAXN];        //cnt[u][v]琛╱--v鐨勮竟鏈夊灝戞潯錛岀敤鏉ュ鐞嗛噸杈?/span>
bool used[MAXN][MAXN][MAXN];                        //used[x][u][v]x鐨勬渶鐭礬鏍戞槸鍚︾敤鍒頒簡杈箄--v
int n, m;

void init();
void dijkstra(int s, int when, int flag);
int main()
{
    int when = 0;
    int u, v;
    while(scanf("%d%d", &n, &m) != EOF) {
        init();
        for(int i = 0; i < m; i++) {
            scanf("%d%d", &u, &v);
            vertex[u].push_back(v);
            vertex[v].push_back(u);
            edge[i].u = u, edge[i].v = v;
            cnt[u][v]++, cnt[v][u]++;
        }
        int ans = 0;
        for(int i = 1; i <= n; i++) {
            dijkstra(i, ++when, 1);
            ans += sum[i];
        }
        for(int i = 0; i < m; i++) {
            int tmp = ans;
            int u = edge[i].u, v = edge[i].v;
            //forbid_u = edge[i].u, forbid_v = edge[i].v;       鍥犱負鏈夐噸杈規墍浠ヤ笉鑳界敤榪欑鏂規硶
            for(int j = 1; j <= n; j++) if(used[j][u][v] && cnt[u][v] == 1) {       //涓嶅姞cnt[u][v] == 1浼氳秴鏃躲傘傚崱鐨勫氨鏄噸杈癸紝闈狅紒
                int tmp = sum[j];
                sum[j] = 0;
                //vector<int> :: iterator it1 = find(vertex[u].begin(), vertex[u].end(), v);
                
//vector<int> :: iterator it2 = find(vertex[v].begin(), vertex[v].end(), u);
                
//*it1 = u, *it2 = v;
                cnt[u][v]--, cnt[v][u]--;
                dijkstra(j, ++when, 2);
                cnt[u][v]++, cnt[v][u]++;
                //*it1 = v, *it2 = u;     //鏈潵鏄敤erase鐨勶紝瓚呮椂浜嗐?nbsp;鐜板湪鎹㈣繖縐嶆柟娉曚篃瓚呮椂浜嗭紝浼拌find鑰楁椂澶箙銆?/span>
                ans = ans - tmp + sum[j];   //鐢ㄦ柊鐨剆um[j]鏉ヤ唬鏇挎棫鐨則mp
                sum[j] = tmp;
                int k ;
                for(k = 1; k <= n; k++) if(visit[k] != when) break;     //濡傛灉鍒犺竟浜嗕互鍚巎涓嶈兘鍒拌揪k(鍗砶娌℃湁榪涜繃闃?
                if(k <= n) {
                    ans = INF;
                    break;
                }
            }
            ans == INF ? printf("INF\n") : printf("%d\n", ans);
            ans = tmp;  //涓嶈鎶婅繖涓猼mp鍜宖or_j閲岀殑tmp娣蜂簡..
        }
        for(int i = 0; i < m; i++) cnt[edge[i].u][edge[i].v] = cnt[edge[i].v][edge[i].u] = 0;   //鍒濆鍖?img src="http://m.shnenglu.com/Images/dot.gif" alt="" />鍥犱負鎰熻memset(cnt)浼氫笉浼氳姳鏇村鏃墮棿
    }
    return 0;
}
void dijkstra(int s, int when, int flag)
{
    int floors = 1;
    int cur = 0;
    deque<int> Q[2];
    Q[cur].push_back(s);
    visit[s] = when;
    do {
        while(!Q[cur].empty()) {
            int u = Q[cur].front();
            Q[cur].pop_front();
            for(int Size = vertex[u].size(), i = 0; i < Size; i++) {
                int v = vertex[u][i];
                if(visit[v] != when && cnt[u][v] > 0) {
                    if(flag == 1) used[s][u][v] = used[s][v][u] = true;   //絎竴嬈℃渶鐭礬鎵嶆爣璁皍sed鍥犱負鎳掑緱鍐欎袱閬嶏紝鎵浠ヨflag鏉ユ爣璁版槸鍒犺竟鍓嶈繕鏀跺垹杈瑰悗鍋氱殑鏈鐭礬錛?鍒欐槸棰勫鐞嗘椂鐨勬渶鐭礬錛屾鏃惰鏍囪used錛?鍒欐槸鍒犺竟鍚庣殑鏈鐭礬錛岃繖涓椂鍊欎笉鑳芥爣璁皍sed.
                    visit[v] = when;
                    sum[s] += floors;
                    Q[1-cur].push_back(v);
                }
            }
        }
        floors++; 
        cur = 1 - cur;
    } while(!Q[cur].empty());
}
void init()
{
    memset(sum, 0, sizeof(sum));
    memset(used, falsesizeof(used));
    for(int i = 1; i <= n; i++) vertex[i].clear();
}


]]>hdu 2377 http://m.shnenglu.com/keroro/archive/2013/05/27/200621.html絎ㄨ泲渚︽帰絎ㄨ泲渚︽帰Mon, 27 May 2013 09:52:00 GMThttp://m.shnenglu.com/keroro/archive/2013/05/27/200621.htmlhttp://m.shnenglu.com/keroro/comments/200621.htmlhttp://m.shnenglu.com/keroro/archive/2013/05/27/200621.html#Feedback0http://m.shnenglu.com/keroro/comments/commentRss/200621.htmlhttp://m.shnenglu.com/keroro/services/trackbacks/200621.html/*
    鏈鐭礬, 緇堢偣闆嗗悎鍒皊鐨勬渶榪滆窛紱繪渶鐭紝姹俿.    鍗沖凡鐭ョ粓鐐歸泦rlcxhru姹備竴s浣垮緱Min{ max{ dis(s, di) } }
    濂介
    
  
  
    鎬濊礬錛? 澶氭鍗曟簮鏈鐭礬錛岄夊嚭鏈澶у?/div>
            鍦ㄥ姣忎釜x榪涜鍒嗗眰鎼滅儲鐨勮繃紼嬩腑, 鐢╩ax_d[y]璁板綍姣忎釜鍦板尯x鍒拌揪鍦板尯y鐨勬渶鐭窛紱諱腑鐨勬渶澶у? 鏈鍚庢眰寰楃殑Star Value灝辨槸max_d[]涓殑鏈灝忓?
            鐢變簬棰樼洰鐨勭壒孌婃杈規潈閮戒負1`錛屾墍浠ュ彲浠ュ熷姪榪欎竴鎬ц川鍙樻崲涓涓婼PFA浣垮叾鏇村揩銆?/div>
            璇翠釜棰樺璇濓紝鍦ㄤ復楂樻椂鐪嬪埌鏈変釜瀛﹀紵鎷撴墤鎺掑簭鐢ㄥ埌“鍒嗗眰鎬濇兂”錛屼竴鐩磋寰楀緢濡欍傚氨鏄嫇鎵戝悗鎴戜滑鍙互寰楀埌floor[i]錛屽鏋渇loor[i] > floor[j]錛屽嵆璇存槑j鏄痠鐨勫墠椹辮妭鐐癸紙灞傛暟瓚婂皬瓚婃帴榪憆oot錛? 鑰宖loor[i] == floor[j]鐨勮瘽鍒檌錛宩鐨勭浉瀵歸『搴忔棤鎵璋擄紝鍥犱負浠栦滑閮藉湪“鍚屼竴灞?#8221;銆?/div>
            榪欓噷鍥犱負杈規潈閮戒負1錛屾墍浠PFA鍙互鐢ㄥ埌涓婅堪鐨勫垎灞傛濇兂錛屽眰鏁拌秺楂橈紝紱籹ource瓚婅繙銆備唬鐮侀噷闈loors灝辮〃紺哄眰鏁幫紝Q鏄粴鍔ㄩ槦鍒楋紝灝辨槸涓灞備竴灞傚湴relax鍚庣戶鑺傜偣銆?/div>
            娉ㄦ剰錛侊紒鍗冧竾涓嶈浠ヤ負max_d[]鏄渶鐭礬綆楁硶閲岄潰鐨刣is[]錛岃繖閲岀殑max_d[i]鏄埌鐐筰鍒扮粓鐐歸泦鍚坽di}鐨勬渶澶у鹼紒鑰屽父瑙勬渶鐭礬綆楁硶閲岀殑dis[]宸茬粡琚渷鐣ヤ負“灞傛暟”浜嗭紝涓嶉渶瑕佽褰曪紝鎵浠ユ病寮鏁扮粍銆?/div>
            鏈閲嶈鐨勬槸瀛﹀埌涓涓猼ip錛侊紒浠ュ墠鎴戝仛澶氭鏈鐭礬鐨勬椂鍊欐昏姣忔閮藉垵濮嬪寲visit[] -> false錛屼絾鍏跺疄涓嶇敤鐨勶紝鎴戜滑鍙鐢ㄤ竴涓彉閲弚hen琛ㄧず“榪欐槸絎嚑嬈″仛SPFA(鎴栧叾浠?“錛岀劧鍚庢瘡嬈″叆闃熷墠閮界湅”鏄惁褰撳墠visit[v] == when灝卞彲浠ョ洿鍒版敼鐐規槸鍚﹀凡緇忓叆榪囬槦......
*/
#include <stdio.h>
#include <string.h>
#include <vector>
#include <deque>
using namespace std;
#define     debug   printf("!\n")
#define     INF     999999999
#define     MAXN    10000
int n;
int max_d[MAXN];
int visit[MAXN];
vector<int> v[MAXN];

void SPFA(int s, int when);
void init();
int main()
{
    int cases, query, id, m, y, x;
    scanf("%d", &cases);
    while(cases--) {
        scanf("%d%d", &n, &query);
        init();
        for(int i = 0; i < n; i++) {
            scanf("%d%d", &id, &m);
            while(m--) {
                scanf("%d", &y);
                v[id].push_back(y);
            }
        }
        int when = 0;
        while(query--) {
            scanf("%d", &m);
            while(m--) {
                scanf("%d", &x);
                SPFA(x, ++when);
            }
        }
        
        int ans = INF, ans_id = -1;
        for(int i = 1; i < MAXN; i++) if(!v[i].empty() && max_d[i] < ans) ans = max_d[i], ans_id = i;
        printf("%d %d\n", ans, ans_id);
    }
    return 0;
}
void init()
{
    for(int i = 0; i < MAXN; i++) v[i].clear();
    memset(max_d, 0, sizeof(max_d));
    memset(visit, 0, sizeof(visit));
}
void SPFA(int s, int when)
{
    deque<int> Q[2];
    int cur = 0;
    Q[cur].push_back(s);
    max_d[s] = max(max_d[s], 1);
    visit[s] = when;
    int floors = 1;             
    do {
        floors++;
        while(!Q[cur].empty()) {
            int at = Q[cur].front();
            Q[cur].pop_front();
            for(int Size = v[at].size(), i = 0; i < Size; i++) {
                int to = v[at][i];
                if(visit[to] != when) {     //鏄惁宸插叆闃?br />                    //max_d[to] = max(max_d[to], max_d[at]+1);      榪欏彞鏄笉瀵圭殑錛屽洜涓鴻繖涓垎灞傝窡鎷撴墤鎺掑簭鐨勫垎灞傛槸涓嶄竴鏍風殑錛屾嫇鎵戞帓搴忔槸瑕佸湪鍏ュ害涓?鏃舵墠鑳藉姞榪涢槦Q錛屾墍浠ュ彲浠ヨ繖鏍峰啓錛屼絾鏄繖閲屽彧瑕佺涓嬈¢亣瑙佺偣to灝卞繀欏誨緱鍏ラ槦錛屽洜涓鴻鐨勬槸鏈鐭礬寰?/span>
                    max_d[to] = max(max_d[to], floors); //涓嶆妸榪欏彞鏀懼湪if澶栭潰錛屽洜涓鴻繖閲岀殑max_d[to]鏄窛紱籹鐨勬渶鐭礬寰勶紝鏈鐭礬寰勪篃灝辨槸鏈灝忓眰鏁幫紝鏈灝忓眰鏁板湪to絎竴嬈″叆闃熺殑鏃跺欏凡緇忓緱鍒頒簡
                    visit[to] = when;
                    Q[1-cur].push_back(to);
                }
            }
        }
        cur = 1 - cur;
    } while(!Q[cur].empty());
}


]]>hdu 2586http://m.shnenglu.com/keroro/archive/2013/05/17/200341.html絎ㄨ泲渚︽帰絎ㄨ泲渚︽帰Thu, 16 May 2013 18:44:00 GMThttp://m.shnenglu.com/keroro/archive/2013/05/17/200341.htmlhttp://m.shnenglu.com/keroro/comments/200341.htmlhttp://m.shnenglu.com/keroro/archive/2013/05/17/200341.html#Feedback0http://m.shnenglu.com/keroro/comments/commentRss/200341.htmlhttp://m.shnenglu.com/keroro/services/trackbacks/200341.html/*
    鏈灝忓叕鍏辯鍏?br />    棰樻剰: 緇欏嚭涓棰楁棤鍚戞湁杈規潈鏍? 璇㈤棶鑻ュ共涓?u,v)瀵圭殑璺濈.


    鎵璋揕CA 鐨凾arjan綆楁硶, 瀹為檯涓婂氨鏄湪寤烘爲鐨勮繃紼嬩腑鎶妐uery涓殑lca緇欒綆楀嚭鏉? 鎵浠ョО涓篳紱葷嚎綆楁硶` . 鏄殑, 鏈川灝辨槸榪欎箞綆鍗? 濂藉瑙i噴閮芥悶澶嶆潅浜?

    姝ラ鐣? 鑷繁google.
    鐞嗚В榪欎釜綆楁硶涓瀹氳鎶撲綇`閫掓帹`鐨勬濇兂(涔熸湁閫掑綊鍦ㄩ噷闈? 涔熻鎶撲綇).
    Tarjan鏄埄鐢ㄥ茍鏌ラ泦瀹炵幇鐨? 鍦ㄩ掓帹榪囩▼涓? 涓媯墊爲鐨剅oot鑺傜偣浠h〃榪欐5鏍?鑱旂郴騫舵煡闆嗘潵鎯?, 榪欐牱鍋氱殑濂藉鏄? 濡傛灉闂偣i涓巎鐨刲ca, 鎴戜滑鍙鎵緄,j閮藉睘浜庣殑鏈灝忕殑鍝5瀛愭爲灝辮浜? 鍥犱負璇ュ瓙鏍戝氨鏄垜浠殑絳旀. 閭e浣曠‘瀹氭槸閭i瀛愭爲鍛? 榪欎竴鐐瑰悗闈㈠啀瑙i噴涓涓?
    涓嬮潰璇碩arjan鏈宸у鐨勭偣浜? 鍥犱負鏄湪寤烘爲鐨勮繃紼嬩腑璁$畻鎵鏈塹uery, 涔熷氨琛ㄧず鎴戜滑姝ゅ埢鏄惁鑳借綆楁煇涓query瀵?u,v)鐨勬潯浠舵槸 : u鍜寁鏄惁閮藉凡緇忛亶鍘嗚繃. 鎵浠ユ垜浠彲浠ュ湪閬嶅巻鍒扮偣v(鍋囪緇忓巻v鐨勬椂闂存瘮u鏅?鐨勬椂鍊欐妸query緇欒綆楀嚭鏉? 姣斿lcm(u,v)灝辨槸find(u). 閭f鍒葷殑find(v)鍜宭cm(u,v)鐩鎬笉鐩哥瓑鍛? 絳旀鏄笉鐩哥瓑, 鑷沖皯鍦ㄦ垜鐨勪唬鐮佸疄鐜頒笂涓嶇浉絳? 鍥犱負father[x]鐨勬洿鏂版槸鍦╜閫掑綊鍥炲幓`鐨勬椂鍊欐洿鏂扮殑, 鑰屾鍒誨湪閬嶅巻v鐐? 榪樻病閫掑綊鍥炲幓鍛? father[v]褰撶劧涔熷氨娌℃洿鏂板暒.
    鍏跺疄涓婁竴孌靛氨宸茬粡鍥炵瓟浜哷濡備綍紜畾鍝5瀛愭爲鏄垜浠兂瑕佺殑絳旀`榪欎竴闂浜? 灝辨槸find(u)鎵浠h〃鐨勫瓙鏍? 娉ㄦ剰, 鏄痜ind(u), 涓嶆槸find(v)! 鍥犱負u鏄湪v涔嬪墠宸茬粡琚亶鍘嗚繃浜? 騫朵笖閫掑綊鍥炲幓榪噑ub_root榪囦簡, 涔熷氨鏄痜ather[u]琚洿鏂頒負sub_root浜? 鎵浠ind(u)鍙互浠h〃褰撳墠鐨剆ub_tree, 鍗砢鏈灝忓寘鍚?u,v)瀛愭爲`

涓嬮潰涓や釜瑙i噴, 鎺ㄨ崘涓涓? 緗楀棪涓鍙? 鐪嬩唬鐮佹洿瀹規槗鐞嗚В, 浜鴻剳妯℃嫙涓閬嶆洿瀹規槗鐞嗚В
    
http://www.nocow.cn/index.php/Tarjan%E7%AE%97%E6%B3%95
    
http://blog.chinaunix.net/uid-1721137-id-181005.html
*/
#include <vector>
#include <stdio.h>
using namespace std;
#define     MAXN    40001
#define     debug   printf("!\n")
vector<int> v[MAXN], w[MAXN], query[MAXN], ans_num[MAXN];
int father[MAXN], dis[MAXN], ans[201];
bool visit[MAXN];
int n;

void init()
{
    for(int i = 1; i <= n; i++) {
        v[i].clear();
        w[i].clear();
        ans_num[i].clear();
        query[i].clear();
        father[i] = i;
        dis[i] = 0;
        visit[i] = false;
    }
}

int find(int x) 

    return x == father[x] ? x : father[x] = find(father[x]); 
}
void Union(int x, int y) { father[find(y)] = find(x); }
void Tarjan(int now, int value)
{
    visit[now] = true;
    dis[now] = value;
    for(int Size = v[now].size(), i = 0; i < Size; i++) {
        int tmp = v[now][i];
        if(visit[tmp] != 0) continue;
        Tarjan(tmp, value + w[now][i]);
        Union(now, tmp);            //娉ㄦ剰欏哄簭, 鍏圱arjan瀛愯妭鐐箃mp, 鍐嶆洿鏂板叾father[tmp], 鍥犱負瑕佷繚璇佸湪閫掓帹tmp鎵浠h〃鐨勫瓙鏍戞椂, father[tmp] = tmp, 鑰屼笌褰撳墠瀛愭爲鏃犲叧. 閫掑綊鍥炴潵鐨勬椂鍊欏啀鎶妕mp浠h〃鐨勫瓙鏍慲騫跺叆`鍒板綋鍓嶆爲閲?/span>
    }

    for(int Size = query[now].size(), i = 0; i < Size; i++) {
        int tmp = query[now][i];
        if(!visit[tmp]) continue;       //鑻isit[tmp] == true, 鍗寵〃紺簍mp鑺傜偣宸茬粡閬嶅巻榪? 姝ゆ椂鍙綆楃浉搴旂殑query
        ans[ans_num[now][i]] = dis[now] + dis[tmp] - 2 * dis[find(tmp)];
    }
}

int main()
{
    int cases, Query, x, y, z;
    scanf("%d", &cases);
    while(cases--) {
        scanf("%d%d", &n, &Query);
        init();
        for(int i = 1; i < n; i++) {
            scanf("%d%d%d", &x, &y, &z);
            v[x].push_back(y);
            w[x].push_back(z);
            v[y].push_back(x);
            w[y].push_back(z);
        }

        for(int i = 0; i < Query; i++) {
            scanf("%d%d", &x, &y);
            query[x].push_back(y);
            query[y].push_back(x);
            ans_num[x].push_back(i);
            ans_num[y].push_back(i);
        }
        Tarjan(1, 0);
        for(int i = 0; i < Query; i++) printf("%d\n", ans[i]);
    }
    return 0;
}


]]> 国产一级做a爰片久久毛片| 色妞色综合久久夜夜| 精品99久久aaa一级毛片| 色综合久久精品中文字幕首页| 亚洲国产成人久久精品影视| 国产精品成人无码久久久久久| 久久有码中文字幕| 欧美一区二区三区久久综| 香蕉久久一区二区不卡无毒影院| 日本精品久久久久影院日本 | 久久精品国产秦先生| 久久人人爽人人爽人人片AV麻豆 | 青青草国产97免久久费观看| 国内精品久久久久影院薰衣草| 2021国产成人精品久久| 亚洲熟妇无码另类久久久| 日本免费久久久久久久网站| 中文字幕久久久久人妻| 精品国产一区二区三区久久蜜臀| 久久青青草原亚洲av无码app| 女同久久| 久久久久97国产精华液好用吗| 久久久婷婷五月亚洲97号色| 亚洲va久久久久| 四虎影视久久久免费观看| 久久av高潮av无码av喷吹| 亚洲欧美精品伊人久久| 久久无码人妻一区二区三区| 日韩人妻无码一区二区三区久久99 | 久久国产美女免费观看精品 | 亚洲精品乱码久久久久久蜜桃| 99久久精品日本一区二区免费| 亚洲伊人久久精品影院| 国产美女亚洲精品久久久综合 | 久久se精品一区精品二区| 人妻少妇久久中文字幕一区二区| 少妇熟女久久综合网色欲| 久久综合亚洲鲁鲁五月天| 久久久久久精品无码人妻| 国产精品视频久久久| 久久国产美女免费观看精品 |