学了下bitset
#include <iostream> #include <bitset> #include <cstdio> using namespace std; const int N=1005; bitset<N>a[N]; int t,n,cas=1,c; int main() { cin>>t; while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){ a[i].reset(); a[i][i]=1; } for(int i=0;i<n;i++){ scanf("%d",&c); while(c--){ int x; scanf("%d",&x); x--; a[i][x]=true; } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(a[j][i])a[j]|=a[i]; double ans=0; for(int i=0;i<n;i++){ c=0; for(int j=0;j<n;j++)if(a[j][i])c++; ans+=1.0/c; } printf("Case #%d: %.5f\n",cas++,ans); } return 0; }