求助我万能的谷民
  • 板块灌水区
  • 楼主Automatically
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/4/20 17:11
  • 上次更新2024/4/20 19:38:41
查看原帖
求助我万能的谷民
900537
Automatically楼主2024/4/20 17:11

题目:

顺序 查看测评数据信息 给定一个 n个点 m条边的有向图 G,结点编号从 1至 n。对于 u = 1, 2, 3 ,…n,依次完成如下要求:对于 u 的所有出边(即从 u 出发的边),按照从小到大的顺序输出出边所指向的节点编号。依次完成的含义是,先按顺序输出 u = 1的出边所指向的点的编号,再按顺序输出 u = 2的出边所指向的点的编号……最后按顺序输出 u = n 的出边所指向的点的编号。

1<=N,M<=500000

输入格式 第一行是两个整数,分别表示点的个数 n和边的个数 m。

接下来 m 行,每行两个整数 u, v,表示一条由 u 指向 v 的边。

输出格式 输出 n行,每行若干个用空格隔开的整数。第 i行输出节点 i 的出边所指向的节点编号。注意,如果一个结点不存在出边,你同样需要输出一个空行。

输入/输出例子1 输入:

3 4

1 3

1 2

3 2

3 1

输出:

2 3

1 2

样例解释 无

我的代码(85分,帮忙改改):

#include<bits/stdc++.h>
using namespace std;
vector<vector<long long>>graph;
void addEdge(int u,int v) {
    graph[u].push_back(v);
}
void printOutEdges(int u) {
    sort(graph[u].begin(),graph[u].end());
    for(int v:graph[u])cout<<v<<' ';
    cout<<"\n";
}
int main() {
    long long n,m;
    cin>>n>>m;
    graph.resize(n+1);
    for(int i=1;i<=m;i++){
        long long u,v;
        cin>>u>>v;
        addEdge(u,v);
    }
    for(int i=1;i<=n;i++)printOutEdges(i);
    return 0;
}
2024/4/20 17:11
加载中...