並查集 帶權並查集 種類並查集 入門基礎題

2021-09-25 01:36:49 字數 1726 閱讀 6834

#include #include #include #include #include#include #include #includetypedef long long ll;

using namespace std;

const int inf=0x3f3f3f3f;

const int maxn = 2e5+100;

int dp[(1<<20)][20];

int g[100][100];

int n,m;

int f[maxn],sum[maxn];

int find(int x)

int main()

return f[x];

}int main()

int cnt=0;

for(int i=0;ipoj-1182 食物鏈(種類並查集)

#include #include using namespace std;

const int n = 50005;

int father[n];

int relation[n];//根點節到點節的關係

void init(int n)

}//更新的步調,先將當前點節與其根點節相連,然後更新其與根點節的關係

//當前節點x與根節點r的關係更新的方法:

// (x與其父點節的關係+其父點節的關係與根點節的關係)%3

//所以在更新節點x的資料之前需要更新其父節點的資料,這是find為什麼搞成遞迴函式的原因

//其更新的次序是從根節點開始往下,始終到當前點節x的父點節。

int find(int x)

return father[x];

}int main()

if(d == 2 && x == y)

fx = find(x);

fy = find(y);

if(fx == fy)//屬於同乙個子集

else//合併兩個連通區域

}printf("%d\n", cnt);

}return 0;

}

poj-1182  食物鏈(種類並查集)

#include #include #include #include #include#include #include #includetypedef long long ll;

using namespace std;

const int inf=0x3f3f3f3f;

const int maxn = 2e5+100;

int dp[(1<<20)][20];

int g[100][100];

int n,k,m,flag;

int f[maxn],r[maxn];

//所有節點與根節點性別相反

int find(int x)

return f[x];

}int main()

for(int i=0;ielse

}printf("scenario #%d:\n",cnt);

if(flag)

printf("no suspicious bugs found!\n");

else

printf("suspicious bugs found!\n");

printf("\n");

cnt++;

}return 0;

}

帶權並查集種類並查集

帶權並查集 種類並查集 例題 種類並查集 洛谷 p2024 食物鏈 與普通並查集不同是新增加屬性 group i group i 表示它和fa i 的關係,對於這三種種類,同類可以用 0表示,其他兩種分別用 1表示該結點被父節點吃,2表示該節點吃父節點。舉個例子 現在有 pa 3 4 group 3...

種類並查集 帶權並查集

p2024 noi2001 食物鏈 題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物...

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...