萌新求助:后4个点WA了
查看原帖
萌新求助:后4个点WA了
217577
kemkra楼主2020/8/7 08:38
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>

using namespace std;

const int MAXN = 100000;

vector<pair<int, int>> edge;
map<int, vector<pair<int, int>>::iterator> head;

int n, m, u, v;
bool vis[MAXN];

void match() {
    int tmp = 0;
    for (auto iter = edge.begin(); iter != edge.end(); iter++) {
        if (iter -> first != tmp) {
            head[iter -> first] = iter;
            tmp = iter -> first;
        }
    }
}

void dfs(int x) {
    vis[x] = 1;
    printf("%d ", x);
    if (head.count(x))
        for (auto iter = head[x]; iter -> first == head[x] -> first; iter++)
            if(!vis[iter -> second]) {
                dfs(iter -> second);
            }
}

void bfs(int x) {
    queue<int> q;
    q.push(x);
    printf("%d ", x);
    while(!q.empty()) {
        int f = q.front();
        if (head.count(f))
            for(auto iter = head[f]; iter -> first == head[f] -> first; iter++) {
                if (!vis[iter -> second]) {
                    int to = iter -> second;
                    q.push(to);
                    printf("%d ", to);
                    vis[iter -> second] = 1;
                }
            }
        q.pop();
    }
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i++) {
        scanf("%d%d", &u, &v);
        edge.push_back(make_pair(u, v));
    }
    sort(edge.begin(), edge.end());
    match();
    dfs(1);
    puts("");
    memset(vis, 0, sizeof(vis));
    bfs(1);
    return 0;
}
2020/8/7 08:38
加载中...