Codeforces Round #536 (Div. 2) D. Lunar New Year and a Wander //图的遍历+优先队列
http://codeforces.com/problemset/problem/1106/D
按字典序遍历,bfs将队列换成优先队列即可,类似prim算法最小生成树,将外部点加入到集合里,再用set维护一下可以到的点。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define mod 1000000007
vector<int>v[100005];
bool vis[100005];
set<int>cango;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int uu,vv;
scanf("%d%d",&uu,&vv);
v[uu].push_back(vv);
v[vv].push_back(uu);
}
cango.insert(1);
while(!cango.empty()){
int x=*cango.begin();
printf("%d ",x);
cango.erase(cango.begin());
vis[x]=1;
for(int i=0;i<(int)v[x].size();i++){
int to=v[x][i];
if(!vis[to]){
cango.insert(to);
}
}
}
return 0;
}