0分求救
查看原帖
0分求救
1068985
Hopoyage楼主2024/1/7 14:58
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct Edge{
    int u,v;
};
vector<int>e[1000010];
vector<Edge>edges;
bool st[1000010];
bool cmp(Edge a,Edge b){
    if(a.v == b.v){
        return a.u < b.u;
    }else return a.v < b.v;
}
void dfs(int u){
    cout << u << " ";
    st[u] = true;
    for(int i = 0;i < e[u].size();i++){
        int j = edges[e[u][i]].v;
        if(!st[j]){
            dfs(j);
        }
    }
}
void bfs(){
    queue<int>q;
    q.push(1);
    cout << 1 << " ";
    st[1] = true;
    while(q.size()){
        int t = q.front();
        q.pop();
        for(int i = 0;i < e[t].size();i++){
            int j = edges[e[t][i]].v;
            if(!st[j]){
                st[j] = true;
                cout << j << " ";
                q.push(j);
            }
        }
    }
}
int main(){
    int n,m;
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for(int i = 0;i < m;i++) {
        int a,b;
        cin >> a >> b;
        edges.push_back((Edge){a,b});
    }
    sort(edges.begin(),edges.end(),cmp);
    for(int i = 0;i < m;i++){
        e[edges[i].u].push_back(i);
    }
    dfs(1);
    puts("");
    memset(st,0,sizeof st);
    bfs();
    return 0;
}
2024/1/7 14:58
加载中...