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

poj 3764 The xor-longest Path 字典樹 + Xor

   這題意思很簡單。求一棵樹里面的一條路徑,使得其異或權(quán)(就是將路徑里面所有邊的權(quán)值異
或起來)最大。
   這個題有兩步。第一步是假定根為節(jié)點0,求出根到其它節(jié)點的異或距離,保存在數(shù)組xor里面,
這個dfs一下即可。然后,用xor[i]^xor[j]就能代表節(jié)點i到節(jié)點j的路徑。這個結(jié)論可以這么看。
如果,i和j之間的路徑經(jīng)過根節(jié)點,那么上面的結(jié)論肯定是正確的。如果,該路徑不經(jīng)過根,那么
xor[i]和xor[j]必定保護從根到某個節(jié)點的相同的一段子路徑,根據(jù)異或的性質(zhì),這段子路徑會
被消掉,所以這個結(jié)論也是這確的。。。
   第二步就是枚舉,xor[i]^xor[j]使得結(jié)果最大了。如果直接暴力,平方的算法肯定會超時的。
由于每個值可以表示成2進制,如果把其它xor值都保存在字典樹里面,用當前的xor[i]去字典樹
里面,一遍就可以找到異或最大值。
   另外,由于樹的點數(shù)太多,只能用鄰接表,用vector模擬鄰接表果斷超時了。。。
改成靜態(tài)鏈表才過。。。

   代碼如下:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;

const int MAX = 100010;
int nXor[MAX];
bool bVis[MAX];
int nFirst[MAX];
struct Edge
{
    int nE;
    int nW;
    int nNext;
};
Edge egs[MAX * 2];

struct Node
{
    Node* pSons[2];
};
Node nodes[MAX * 32];
Node* pRoot = &nodes[0];
int nNew;

void GetBCode(int nL, int* nBCode, int& nLen)
{
    nLen = 0;
    while (nLen <= 30)
    {
        nBCode[nLen++] = nL % 2;
        nL >>= 1;
    }
    reverse(nBCode, nBCode + nLen);
}

void Insert(int nL)
{
    int nLen = 0;
    int i = 0;
    int nBCode[32];

    GetBCode(nL, nBCode, nLen);
    Node* pNode = pRoot;

    while (i < nLen)
    {
        if (pNode->pSons[nBCode[i]])
        {
            pNode = pNode->pSons[nBCode[i]];
        }
        else
        {
            memset(nodes + nNew, 0, sizeof(nodes[nNew]));
            pNode->pSons[nBCode[i]] = nodes + nNew;
            pNode = nodes + nNew;
            ++nNew;
        }
        ++i;
    }
}

int FindMax(int nL)
{
    int nLen = 0;
    int nAns = 0;
    int i = 0;
    int nBCode[32];
    Node* pNode = pRoot;
    
    GetBCode(nL, nBCode, nLen);
    while (i < nLen)
    {
        int nBest = (nBCode[i] == 0 ? 1 : 0);
        int nBad = (nBCode[i] == 0 ? 0 : 1);
        if (pNode->pSons[nBest])
        {
            nAns = 2 * nAns + nBest;
            pNode = pNode->pSons[nBest];
        }
        else if (pNode->pSons[nBad])
        {
            nAns = 2 * nAns + nBad;
            pNode = pNode->pSons[nBad];
        }
        else break;
        ++i;
    }

    return nAns ^ nL;
}

void Dfs(int nV, int nL)
{
    nXor[nV] = nL;
    bVis[nV] = true;
    for (int e = nFirst[nV]; e != -1; e = egs[e].nNext)
    {
        if (!bVis[egs[e].nE])
        {
            Dfs(egs[e].nE, nL ^ egs[e].nW);
        }
    }
}

int main()
{
    int nN;
    int nU, nV, nW;
    
    while (scanf("%d", &nN) == 1)
    {
        for (int i = 0; i < nN; ++i) nFirst[i] = -1;
        for (int i = 1, j = 0; i < nN; ++i)
        {
            scanf("%d%d%d", &nU, &nV, &nW);
            egs[j].nE = nV;
            egs[j].nW = nW;
            egs[j].nNext = nFirst[nU];
            nFirst[nU] = j++;
            egs[j].nE = nU;
            egs[j].nW = nW;
            egs[j].nNext = nFirst[nV];
            nFirst[nV] = j++;
        }

        memset(bVis, falsesizeof(bool) * nN);
        Dfs(0, 0);

        memset(&nodes[0], 0, sizeof(Node));
        nNew = 1;
        int nAns = 0;
        
        for (int i = 0; i < nN; ++i)
        {
            nAns = max(nAns, FindMax(nXor[i]));
            Insert(nXor[i]);
        }
        printf("%d\n", nAns);
    }

    return 0;
}

posted on 2012-10-12 20:12 yx 閱讀(1045) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導航

統(tǒng)計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網(wǎng)友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久午夜夜伦鲁鲁| 亚洲国产日韩欧美| 国产婷婷色一区二区三区| 国产精品久久久久永久免费观看| 欧美日韩高清免费| 欧美系列精品| 国产日本欧美在线观看 | 亚洲精品孕妇| 日韩视频在线观看一区二区| 日韩亚洲视频在线| 亚洲综合首页| 久久久久天天天天| 欧美女同在线视频| 国产三级精品三级| 亚洲精品一区二区三区四区高清 | 91久久中文| 亚洲一区二区免费在线| 久久精品视频在线观看| 欧美成人精品一区二区三区| 亚洲精品字幕| 欧美中文字幕精品| 欧美日韩福利在线观看| 国产亚洲精品美女| 一区二区三区高清| 久久综合久久综合久久| 亚洲精品日韩久久| 久久久夜夜夜| 国产精品免费看| 亚洲日本乱码在线观看| 久久久女女女女999久久| 日韩视频一区二区在线观看| 久久精品99无色码中文字幕| 欧美体内she精视频在线观看| 精品不卡在线| 午夜天堂精品久久久久| 91久久精品一区二区别| 欧美一级理论性理论a| 欧美日韩国产高清| 在线观看亚洲精品视频| 欧美一区网站| 一区二区三区视频免费在线观看| 一区二区三区四区五区在线| 欧美在线播放一区| 亚洲国产高清在线观看视频| 午夜精品免费视频| 欧美日韩国产高清视频| 在线观看欧美一区| 麻豆成人在线| 久久精品亚洲热| 国产综合色一区二区三区| 小辣椒精品导航| 亚洲午夜电影网| 国产精品www色诱视频| 国产精品99久久久久久有的能看| 欧美激情一区二区三区 | 久久久美女艺术照精彩视频福利播放 | 国内自拍一区| 久久精品免费观看| 欧美伊人久久大香线蕉综合69| 国产精品美女在线| 欧美在线视频全部完| 亚洲欧美日韩精品综合在线观看| 国产精品极品美女粉嫩高清在线 | 一区二区三区欧美在线| 亚洲国产另类 国产精品国产免费| 久久中文久久字幕| 亚洲精品久久久久久一区二区 | 欧美在线免费视频| 伊人久久综合97精品| 免费一级欧美片在线播放| 久久久久国产精品麻豆ai换脸| 很黄很黄激情成人| 欧美国产日本| 欧美日韩999| 欧美一区二区三区免费视| 欧美一区二区免费视频| 亚洲第一成人在线| 亚洲精品黄色| 国产午夜精品视频免费不卡69堂| 久久一区免费| 欧美人与禽性xxxxx杂性| 午夜精品一区二区三区电影天堂 | 一本色道精品久久一区二区三区 | 亚洲素人一区二区| 欧美三级在线| 久久精品首页| 午夜伦欧美伦电影理论片| 国产综合色产在线精品| 久久久久网站| 欧美大片国产精品| 亚洲资源av| 久久另类ts人妖一区二区| 亚洲毛片在线看| 亚洲色无码播放| 在线国产亚洲欧美| 一本久道久久综合中文字幕| 樱桃成人精品视频在线播放| 香蕉久久夜色精品国产使用方法| 欧美激情欧美狂野欧美精品| 久久亚洲色图| 在线午夜精品| 久久人人超碰| 亚洲女人天堂成人av在线| 久久精品国产视频| 亚洲一区二区三区高清| 久久手机精品视频| 午夜精品久久久久久久99热浪潮| 久久青青草原一区二区| 亚洲视频免费| 麻豆亚洲精品| 久久精品一本久久99精品| 欧美日韩福利| 欧美黑人多人双交| 国产一区二区三区高清| 中国成人在线视频| 亚洲免费观看高清完整版在线观看熊| 欧美一区午夜精品| 欧美日韩亚洲天堂| 老牛嫩草一区二区三区日本| 欧美成人小视频| 久久午夜视频| 国产日韩欧美在线一区| 一本大道av伊人久久综合| 亚洲欧洲在线免费| 久久久久久一区二区三区| 久久国产精品黑丝| 欧美小视频在线| 9久re热视频在线精品| 日韩午夜在线视频| 欧美成人a∨高清免费观看| 蜜臀a∨国产成人精品| 极品裸体白嫩激情啪啪国产精品| 午夜精品一区二区三区电影天堂| 亚洲欧美日韩在线观看a三区 | 性欧美videos另类喷潮| 国产精品视频免费一区| 亚洲国产成人av在线| 亚洲午夜av在线| 亚洲视频欧美视频| 欧美日韩国产麻豆| 亚洲开发第一视频在线播放| 日韩一级不卡| 欧美色大人视频| 一二美女精品欧洲| 久久精品免费看| 日韩一区二区精品视频| 国产综合色产在线精品| 亚洲欧美日本另类| 久久久国产一区二区| 国语自产精品视频在线看一大j8| 久久激情综合| 欧美大片免费久久精品三p | 国内视频精品| 久久久久久久久久久一区| 蜜桃精品久久久久久久免费影院| 今天的高清视频免费播放成人| 久久久噜噜噜久久| 亚洲黄色成人| 午夜精品久久久久| 怡红院精品视频在线观看极品| 久久露脸国产精品| 亚洲国产精品第一区二区| 亚洲永久精品大片| 影音先锋中文字幕一区| 欧美日韩国产精品专区| 午夜日韩在线观看| 亚洲国产影院| 久久成人精品一区二区三区| **网站欧美大片在线观看| 欧美日韩免费看| 久久精品成人一区二区三区蜜臀 | 久久精品国产99国产精品澳门| 免费日韩视频| 午夜影视日本亚洲欧洲精品| 136国产福利精品导航网址| 欧美日韩精品二区| 久久精品青青大伊人av| 99re在线精品| 欧美电影免费观看高清完整版| 亚洲制服av| 亚洲免费观看在线视频| 在线国产精品播放| 国产偷国产偷精品高清尤物| 欧美日韩国产成人在线观看| 久久人人爽人人爽爽久久| 亚洲午夜在线观看视频在线| 亚洲国产精品第一区二区| 麻豆精品视频在线| 久久激情久久| 欧美在线一二三四区| 亚洲综合好骚| 亚洲视频在线观看网站| 亚洲精品一二三| 亚洲欧洲在线一区| 在线看不卡av| 国产日韩在线看| 国产精品一卡二| 国产精品久久久久天堂| 欧美日韩成人一区二区| 欧美福利在线观看|