zoj 3601 Unrequited Love
来源:互联网 发布:怎样成为一名网络作家 编辑:程序博客网 时间:2024/05/24 03:12
There are n single boys and m single girls. Each of them may love none, one or several of other people unrequitedly and one-sidedly. For the comingq days, each night some of them will come together to hold a single party. In the party, if someone loves all the others, but is not loved by anyone, then he/she is called king/queen of unrequited love.
Input
There are multiple test cases. The first line of the input is an integer T ≈ 50 indicating the number of test cases.
Each test case starts with three positive integers no more than 30000
--nmq
. Then each of the nextn lines describes a boy, and each of the nextm lines describes a girl. Each line consists of the name, the number of unrequitedly loved people, and the list of these people's names. Each of the lastq lines describes a single party. It consists of the number of people who attend this party and their names. All people have different names whose lengths are no more than20
. But there are no restrictions that all of them are heterosexuals.
Output
For each query, print the number of kings/queens of unrequited love, followed by their names in lexicographical order, separated by a space. Print an empty line after each test case. See sample for more details.
Sample Input
22 1 4BoyA 1 GirlCBoyB 1 GirlCGirlC 1 BoyA2 BoyA BoyB2 BoyA GirlC2 BoyB GirlC3 BoyA BoyB GirlC2 2 2H 2 O SHe 0O 1 HS 1 H3 H O S4 H He O S
Sample Output
001 BoyB000
题目大意:给定一些关系,对于每个人(男孩或女孩),列出他所喜欢的人(允许同性恋),对于每次询问(聚会),求这样一种人:他喜欢所有人,但所有人都不喜欢他
分析:简单分析可知,这种人假如存在,最多只有一个。因为假设有2个这样的人,他们彼此就与题意矛盾。故可以枚举这个人,如何快速枚举?
对于一次聚会,先把第一个人假设为这种人,遍历其后的人,与当前这个人判断关系,若发现这个人不可能是这种人,则把当前遍历的更新为这种人。
扫一遍后,再判断这个人是否真的是,只要和他前面所有的人判断一下即可
#include<cstdio>#include<string>#include<set>#include<map>using namespace std;const int N=30005;map<string,int> M;map<string,int>::iterator it;set< pair<int,int> > S;string name[N];int tol,party[N];char na[22];int hash(char *s){it=M.find(s);if(it!=M.end())return it->second;else {name[++tol]=s;return M[s]=tol;}}void Cin(int x){int i,k,u,v;for(i=0;i<x;i++){scanf("%s%d",na,&k);u=hash(na);while(k--){scanf("%s",na);v=hash(na);S.insert(make_pair(u,v));}}}int main(){int T,n,m,q,i,k,ans;scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&m,&q);M.clear(),S.clear(),tol=0;Cin(n),Cin(m);while(q--){scanf("%d%s",&k,na);ans=party[0]=M[na];int p=0;for(i=1;i<k;i++){scanf("%s",na),party[i]=M[na];if(S.find(make_pair(ans,party[i]))==S.end()||S.find(make_pair(party[i],ans))!=S.end()){ans=party[i],p=i;}}for(i=0;i<p;i++){if(S.find(make_pair(ans,party[i]))==S.end()||S.find(make_pair(party[i],ans))!=S.end())break;}if(i!=p)puts("0");else printf("1 %s\n",name[ans].c_str());}puts("");}return 0;}
- ZOJ 3601 Unrequited Love
- zoj 3601 Unrequited Love
- ZOJ 3601 Unrequited Love
- ZOJ 3601 Unrequited Love
- zoj 3601unrequited Love
- ZOJ 3601 Unrequited Love
- ZOJ 3601Unrequited Love(模拟)
- ZOJ 3601 Unrequited Love【STL】
- zoj 3601 Unrequited Love(STL,灵活题)
- zoj 3310 - Unrequited Love
- ZOJ Unrequited Love 图论+STL
- ZOJ-3601-Unrequited Love【9th浙江省赛】【模拟】【STL】
- ZOJ 3601 9th省赛 B Unrequited Love【模拟】
- zoj 4704 Unrequited Love 贪心 孤独者
- ZOJ 8th Anniversary Contest Unrequited Love
- Unrequited Love
- ZOJ3310 Unrequited Love
- ZOJ3601-Unrequited Love
- "Wireless Network Connection" doesn't have a valid IP configuration - Not fixed
- 第九周项目一
- overlay实现帧动画
- poj 1185 炮兵阵地 (状态压缩dp)
- UberStudent 2.0 "Lightweight" 发布
- zoj 3601 Unrequited Love
- SecureCRT不能输入命
- java压缩和解压zip
- 海量数据处理之bitmap实现
- 关于长字符数组strcpy到短字符数组发生的问题
- 源代码学习辅助工具介绍
- HDU 1081 To The Max(最大子矩阵和)
- VMware tools安装
- Can you answer these queries?+线段树