描述
本题目考察大家图的存储的基本能力(建议大家将两种图的储存方式都试一下),题目将给大家n个点的信息(字符串,长度<=30),再给大家m条边的信息,最后提出k个问题,每个问题都是寻找每个点的邻接点。
输入
第一行:n,m,k
接下来n行,每行一个字符串,表示每个顶点的信息(字符串长度<=30)
接下来m行,每行两个数字a b,(0<=a,b <n 且a!=b)表示存在一条第a个点指向第b个点的边;
接下来k行,每行一个数字z,表示询问第z顶点所有的邻接点信息;
输出
一共k行,分别对应k个问题的答案:
如果询问的点,没有邻接点,那么输出0;
如果询问的点有多个邻接点,那么按照每个点(注意不是边)的输入顺序,进行输出,每个点的信息用空格隔开。
样例输入
5 7 5
A
B
C
E
F
0 1
1 2
2 4
0 3
4 0
4 1
3 2
0
2
3
4
1
样例输出
B E
F
C
A B
C
***样例测试我是对的,但就是无法AC,一直提示Output Limit Exceeded
下面是代码,麻烦各位大神看看
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
char mp[10010];
vector<long long>a[10001];
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++)cin>>mp[i];
memset(a,0,sizeof(a));
for(int j=1;j<=m;j++){
int x,y,idx=0;
cin>>x>>y;
a[x].push_back(y);
}
for(int i=1;i<=k;i++){
int t;
cin>>t;
if(a[t].size()==0)cout<<0;
else for(int j=0;j<a[t].size();j++){cout<<mp[a[t][j]];
if(j!=a[t].size()-1)cout<<" ";
}
if(i!=k)cout<<endl;
}
return 0;
}