题目链接
分析
直接用优先队列维护字典序就好。
代码
感觉写的好像dijkstra
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 1e5 + 10;
int n, m, cnt;
int vis[N], head[N];
struct edge{
int to, nxt;
}e[N << 1];
inline void add(int u, int v){
e[++cnt] = {v, head[u]};
head[u] = cnt;
}
priority_queue<int, vector<int>, greater<int> > que;
void bfs(int s){
que.push(s);
vis[s] = 1;
while (!que.empty()){
int u = que.top();
printf("%d ", u);
que.pop();
for (int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if (!vis[v]){
que.push(v);
vis[v] = 1;
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(), cout.tie();
cin >> n >> m;
for (int i = 1, x, y; i <= m; ++i) {
cin >> x >> y;
add(x, y), add(y, x);
}
bfs(1);
return 0;
}