LuoguP2097 資料分發1 題解
阿新 • • 發佈:2021-12-16
LuoguP2097 資料分發1 題解
Content
有一些電腦,一部分電腦有雙向資料線連線。如果一個電腦得到資料,它可以傳送到的電腦都可以得到資料。現在,你有這個資料,問你至少將其輸入幾臺電腦,才能使所有電腦得到資料。
資料範圍:\(n\leqslant 10^5,m\leqslant 2\times 10^5\)。
Solution
稍微觀察以後就會明白這是一道經典的並查集題目,我們只需要通過並查集將兩個電腦所在的聯通快合併,最後看有多少個聯通塊就好了。
Code
int f[100007], n, m, vis[100007], ans; inline int getfa(int x) { return x == f[x] ? x : f[x] = getfa(f[x]); } inline void unionn(int x, int y) { x = getfa(x), y = getfa(y); if(x != y) f[y] = x; } int main() { scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++i) f[i] = i; for(int i = 1; i <= m; ++i) { int a, b; scanf("%d%d", &a, &b); unionn(a, b); } for(int i = 1; i <= n; ++i) if(!vis[getfa(i)]) ans++, vis[getfa(i)] = 1; printf("%d", ans); return 0; }