第一次:63pts
#include<bits/stdc++.h>
using namespace std;
long long n,m,c=0,a[101][101],f[101],x,i,j,k;
int main()
{
cin>>n;
for(i=1;i<=n;i++){
while(cin>>x){
if(x==0)break;
a[i][x]=1;
}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
if(a[j][i]&&a[i][k])a[j][k]=1;
for(i=1;i<=n;i++){
f[i]=i;
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
if(a[j][k]!=0)f[k]=f[j];
}
for(i=1;i<=n;i++)
if(f[i]==i)c++;
cout<<c;
}

RE原因显然
第二次:100pts
#include<bits/stdc++.h>
using namespace std;
long long n,m,c=0,a[201][201],f[201],x,i,j,k;
int main()
{
cin>>n;
for(i=1;i<=n;i++){
while(cin>>x){
if(x==0)break;
a[i][x]=1;
}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
if(a[j][i]&&a[i][k])a[j][k]=1;
for(i=1;i<=n;i++){
f[i]=i;
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
if(a[j][k]!=0)f[k]=f[j];
}
for(i=1;i<=n;i++)
if(f[i]==i)c++;
cout<<c;
}
为什么把数组调大后就不超时了呢?萌新求助QwQ