题解 P2835 【刻录光盘】
核心思想
并查集....
然而我们发现这题用传统的并查集会
因为并查集是双向的。
就比如说:
有五个点
然后程序就会输出
我们可以这样思考:
我们不管那些特殊点(比如
最后
拜拜,满分QAQ
按道理说是0ms....
#include<bits/stdc++.h>
int a,b,c,j,f[202],q[202],ans;
inline int find(int x){ 并查集
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
int main(){
std::cin>>a;
for(register int i=1;i<=a;i++)f[i]=i; 初始化
for(register int i=1;i<=a;i++){
b=find(i);
while(1){
int d;std::cin>>d;
if(d==0) break;
q[d]=1; 标记一下他有直系父亲
c=find(d);
if(c!=b)f[c]=b;
}
}
for(register int i=1;i<=a;i++)
if(f[i]==i||q[i]==0)ans++; 最后加以判断
std::cout<<ans;
return 0;
}