一个聚会中 存在某个人 其所有喜欢的人都出现了 且不被所有出现的人喜欢
其实这样的人最多只能有一个 对于题目所给的每一个集合 从前往后扫一遍 找出一个符合条件的 再针对其判断一遍
从前往后 是判断每个人与之后的人的关系 只有之后的满足了 才需要判断之前的
#include <bits/stdc++.h> using namespace std; map <string,int> mp; set <string> st[30010]; string str[30010]; int n,m; int main() { string s; int t,q,l,i,j,p,flag; scanf("%d",&t); while(t--) { cin>>n>>m>>q; mp.clear(); for(i=1;i<=n+m;i++) st[i].clear(); for(i=1;i<=n+m;i++) { cin>>s>>l; mp[s]=i; for(j=1;j<=l;j++) { cin>>s; st[i].insert(s); } } while(q--) { cin>>l; p=0; for(i=1;i<=l;i++) { cin>>str[i]; if(p==0) p=1; else { if(!st[mp[str[p]]].count(str[i])||st[mp[str[i]]].count(str[p])) { p=i; } } } flag=1; for(i=1;i<=p-1;i++) { if(!st[mp[str[p]]].count(str[i])||st[mp[str[i]]].count(str[p])) { flag=0; break; } } if(flag) { cout<<1<<" "<<str[p]<<endl; } else { cout<<0<<endl; } } cout<<endl; } return 0; }