Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32028 | daimo | 【S】T3 | C++ | 运行超时 | 20 | 2000 MS | 524404 KB | 1329 | 2024-08-30 14:29:26 |
//80pts #include<bits/stdc++.h> #define int long long using namespace std; int n; vector<int>v[200010]; int fat[200010]; int rd[200010]; set<int>b[200010],ans; map<int,int>mp[200010]; bool flag[200010]; inline set<int> jiao(set<int>A,set<int>B){ set<int>res; for(set<int>::iterator i=A.begin();i!=A.end();++i){ if(B.count(*i))res.insert(*i); } return res; } inline set<int> bing(set<int>A,set<int>B){ set<int>res; for(set<int>::iterator i=A.begin();i!=A.end();++i){ res.insert(*i); } for(set<int>::iterator j=B.begin();j!=B.end();++j){ res.insert(*j); } return res; } void f(int x){ if(flag[x])return; if(v[x].size()==0){ b[x].insert(x); flag[x]=1; return; } f(v[x][0]); b[x]=b[v[x][0]]; for(int i=1;i<v[x].size();i++){ f(v[x][i]); b[x]=jiao(b[x],b[v[x][i]]); } flag[x]=1; b[x].insert(x); return; } signed main(){ ios::sync_with_stdio(0); cin>>n; for(int i=1;i<=n;++i){ int l; cin>>l; for(int j=1;j<=l;++j){ int x; cin>>x; v[i].push_back(x); fat[x]=i; } } for(int i=1;i<=n;++i){ if(fat[i]==0){ f(i); } } int t; cin>>t; while(t--){ ans.clear(); int m; cin>>m; for(int i=1;i<=m;++i){ int x; cin>>x; ans=bing(ans,b[x]); } cout<<ans.size()<<endl; } return 0; }