问题标题: 酷町堂:1313

0
0
已解决
江见匀
江见匀
新手光能
新手光能

最后一个也wa

#include<iostream>
using namespace std;
int n,fa[10001],cnt;
void init(){
    for(int i=1;i<=n;i++) fa[i]=i;
}
int find(int x){
    if(fa[x]==x) return fa[x];
    return fa[x]=find(fa[x]);
}
void unit(int x,int y){
    x=find(x);
    y=find(y);
    if(x==y) return ;
    fa[x]=y;
    return ;
}
bool same(int x,int y){
    return find(x)==find(y);
}//并查集 
int main(){
    cin>>n;
    init();
    for(int i=1,a;i<=n;i++){
        while(1){
            cin>>a;
            if(a!=0) unit(a,i);
            if(a==0) break;
        }
    }
    for(int i=1;i<=n;i++) if(fa[i]==i) cnt++;
    cout<<cnt;
    return 0;
}
为哈?


0
已采纳
周琪岳
周琪岳
资深光能
资深光能

我的思路:

首先,Floyd传递闭包求出连通**

然后:

(我没发代码,主要代码在函数里和前面,发函数应该不算整段代码吧,况且我发的是图片)

就ok了

我要回答