Beauty of Trees(帶權(quán)并查集)

題目

https://www.nowcoder.com/acm/contest/119/A

題目大意

每次查詢告訴你[l,r]之間的數(shù)的異或和,如果遇到不正確的查詢,輸出查詢編號。

算法思路

  • 因為異或和前綴是不影響他的值,所以我們只需要將l和r連線,以異或值為權(quán)值,帶權(quán)并查集即可。
  • 每次查詢?nèi)绻鹟和r在同一集合中,檢查與其值是否相符即可。若不在,直接相連即可。
  • 帶權(quán)并查集的操作
int Find(int x)
{
    if(x==fa[x])return x;
    int temp=fa[x];
    fa[x]=Find(fa[x]);//路徑壓縮
    rnk[x]=rnk[x]^rnk[temp];//更新rnk值
    return fa[x];
}

合并操作

 int ru=Find(u);
        int rv=Find(v);
        if(ru!=rv) {
            fa[ru]=rv;
            rnk[ru]=k^rnk[u]^rnk[v];
/*這里需要想一想;然后只更新了根節(jié)點的值,
子節(jié)點的值可以在后續(xù)查詢find的時候更新*/
        }
  • 為了方便操作,采用左開右閉(常規(guī)操作)

代碼

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const int N=1e5+5;
int fa[N];
ll rnk[N];
void Init(int n)
{
    for(int i=0;i<=n;i++)
    {
        fa[i]=i;
        rnk[i]=0;
    }
}
int Find(int x)
{
    if(x==fa[x])return x;
    int temp=fa[x];
    fa[x]=Find(fa[x]);
    rnk[x]=rnk[x]^rnk[temp];
    return fa[x];
}

int main()
{
    int n,m;
    while(cin>>n>>m){
        Init(n+1);
        int flag=0;
    for(int i=1;i<=m;i++){
         int u,v;
         ll k;
        scanf("%d%d%lld",&u,&v,&k);
        v++;
        int ru=Find(u);
        int rv=Find(v);
        if(ru!=rv) {
            fa[ru]=rv;
            rnk[ru]=k^rnk[u]^rnk[v];
        }
        else
        {
            if((rnk[v]^rnk[u])!=k) {flag=1;cout<<i<<endl;}
        }
    }
    if(!flag) cout<<-1<<endl;
    }
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章圖片上傳不正常,如需文檔,可聯(lián)系微信:1017429387 目錄 1 安裝... 4 1.1 配置探針... ...
    Mrhappy_a7eb閱讀 6,917評論 0 5
  • 這個不錯分享給大家,從扣上看到的,就轉(zhuǎn)過來了 《電腦專業(yè)英語》 file [fail] n. 文件;v. 保存文...
    麥子先生R閱讀 7,106評論 5 24
  • 點點和我,這是我們倆最好看最有feel的照片,于是閑下來之余把它畫了下來。
    悟幻閱讀 228評論 4 2
  • 2017年2月24日,陽光明媚,微風(fēng)徐徐,上海二月的天依然帶有一絲寒意。自從與Bob分手后,終日萎靡不振的,都沒有...
    夕顏夕語閱讀 515評論 6 5
  • 白月光 黃花地 樹影斑駁 花陰沉沉 逐春 緩緩而行 有暗香盈袖
    葉一半閱讀 143評論 0 1

友情鏈接更多精彩內(nèi)容