社区讨论

有趣的事

P14077[GESP202509 七级] 连通图参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhj3erht
此快照首次捕获于
2025/11/03 20:04
4 个月前
此快照最后确认于
2025/11/03 20:04
4 个月前
查看原帖
资料分发代码CPP
#include <cstdio>
#define N (int(2e5 + 10))

bool vis[N];
int fa[N], n, m, p, q, ans, i, j;

int Fa(int x){
    if(fa[x] == x)
        return x;
    return fa[x] = Fa(fa[x]);
}

void merge(int a, int b){
    if(Fa(a) != Fa(b)) 
        fa[Fa(a)] = Fa(b);
}

bool in(int a, int b){
    return Fa[a] == Fa[b];
}

int main(){
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i ++)
        fa[i] = i;
    for(i = 1; i <= m; i ++)
        scanf("%d%d", &p, &q),
        merge(p, q);
    for(i = 1; i <= n; i ++)
        vis[Fa(i)] = true;
    for(i = 1; i <= n; i ++)
        ans += vis[i];
    printf("%d\n", ans);
    return 0;
}```
连通图代码CPP
#include <cstdio>
#define N (int(2e5 + 10))

bool vis[N];
int fa[N], n, m, p, q, ans, i, j;

int Fa(int x){
    if(fa[x] == x)
        return x;
    return fa[x] = Fa(fa[x]);
}

void merge(int a, int b){
    if(Fa(a) != Fa(b)) 
        fa[Fa(a)] = Fa(b);
}

bool in(int a, int b){
    return Fa[a] == Fa[b];
}

int main(){
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i ++)
        fa[i] = i;
    for(i = 1; i <= m; i ++)
        scanf("%d%d", &p, &q),
        merge(p, q);
    for(i = 1; i <= n; i ++)
        vis[Fa(i)] = true;
    for(i = 1; i <= n; i ++)
        ans += vis[i];
    printf("%d\n", ans - 1); //唯一区别
    return 0;
}```
代码几乎一致!!!

回复

3 条回复,欢迎继续交流。

正在加载回复...