一道关于图的存储的题,为何我的代码一直报错Output Limit Exceeded?

描述

本题目考察大家图的存储的基本能力(建议大家将两种图的储存方式都试一下),题目将给大家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;
} 
c++

1个回答

1.输入每行一个字符串,你好像认为都是字符,给了char数组存储,不正确,起码每隔31个char存一个字符串吧,或者字符串数组。
2.数据集大小有给吗?里面给10001的大小很奇怪。
3.如果是OJ的话一般对报错有说明,我不确定OUTPUT limit exceed指超出什么


WA wrong answer?
建议不要用vector了,很慢,而且不够简洁,建议用二维数组直接储存,这道题是有向图,那么用二维数组再合适不过,而且你的答案错误应该是
#用点的顺序输出
vector输出应该是按边输出的,用数组存储很简单就可以找到对应点,直接输出一列就按输入点输出了

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复Double020: 如果问题解决,不要光感谢,请点下左上角的采纳。
9 个月之前 回复
Double020
Double020 哇,感谢,题目要求字符串我是真没看到,只不过我改了之后还是WA了,数据是在10000以内(哭)
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!