#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編號...