#include<queue> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<ll,ll>pll; typedef pair<int,int>pii; const int N = 1e5+10; vector<int>res; vector<int>q[55];//每个部门的人 vector<int>p[10010];//每个人所属的部门 queue<int>que;//最终感染的楼层 int st[55];//记录楼层是否被标记; int x,n,m; void solve() { for(int i=0;i<p[n].size();++i) { que.push(p[n][i]); st[p[n][i]]=1; } while(!que.empty()) { int t=que.front(); que.pop(); for(int i=0;i<q[t].size();++i) { int a=q[t][i]; for(int j=0;j<p[a].size();++j) { int pos=p[a][j]; if(st[pos]==0) { que.push(pos); st[pos]=1; } } } } } int main() { cin>>x>>n>>m; for(int i=1;i<=m;++i) { int k; cin>>k; for(int j=1;j<=k;++j) { int kk; cin>>kk; q[i].push_back(kk); p[kk].push_back(i); } } solve(); for(int i=1;i<=m;++i) if(st[i]==1) { for(int j=0;j<q[i].size();++j) res.push_back(q[i][j]); } sort(res.begin(),res.end()); res.erase(unique(res.begin(),res.end()),res.end()); cout<<res.size(); for(int i=0;i<res.size();++i) cout<<" "<<res[i]; return 0; }
全部评论
(1) 回帖