题目链接:https://nanti.jisuanke.com/t/16950
【中文题意】有一群猴子,每个猴子都有自己喜欢的香蕉,每种香蕉都有自己的产地,问你每个猴子喜欢的香蕉产自哪里,结果按字典序排序。
【思路分析】求一下传递闭包就好了,找到每个猴子和每种香蕉的关系,然后直接输出就OK了。
【AC代码】
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int a[55][55],b[55][55],c[55];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m,x,y;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%d%d",&x,&y);
a[x][y]=1;
}
for(int i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
b[x][y]=1;
}
map<int,int>ma;
for(int i=1; i<=50; i++)
{
ma.clear();
int cnt=0;
for(int j=1; j<=50; j++)
{
if(a[i][j]==1)
{
for(int k=1; k<=50; k++)
{
if(b[j][k]==1&&ma[k]==0)
{
ma[k]++;
c[cnt++]=k;
}
}
}
}
sort(c,c+cnt);
for(int j=0;j<cnt;j++)
{
printf("%d %d\n",i,c[j]);
}
}
printf("\n");
}
return 0;
}