Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- int visited[2000090];
- vector<int>edges[2000090];
- vector<int>ans;
- int n;
- void bfs(int start)
- {
- int tok=1;
- vector<pair<int,int>>que;
- int index=0;
- que.push_back(make_pair(start,1));
- visited[start]++;
- ans.push_back(start);
- int last_index=0;
- while(index!=n)
- {
- while(index<=last_index)
- {
- int s=que[index].first;
- for(auto x:edges[s]){
- if(visited[x]==0){
- // cout<<"check "<<s<<" "<<x<<endl;
- if(!tok){
- ans.push_back(x);
- }
- visited[x]=1;
- que.push_back(make_pair(x,tok^1));
- }
- }
- index++;
- }
- last_index=que.size()-1;
- tok^=1;
- }
- }
- main()
- {
- int q;
- cin>>q;
- while(q--){
- ans.clear();
- int m;
- cin>>n>>m;
- vector<pair<int,int> >degree;
- for(int i=1;i<=n;i++){
- edges[i].clear();
- degree.push_back(make_pair(0,i));
- }
- for(int i=0;i<m;i++){
- int u,v;
- cin>>u>>v;
- degree[u].first++;
- degree[v].first++;
- edges[u].push_back(v);
- edges[v].push_back(u);
- }
- // cout<<"edges\n";
- // for(int i=1;i<=n;i++)
- // {
- // cout<<"i="<<i<<endl;
- // for(auto x:edges[i]){
- // cout<<x<<" ";
- // }
- // cout<<endl;
- // }
- memset(visited,0,sizeof(visited));
- sort(degree.begin(),degree.end());
- int start=degree[degree.size()-1].second;
- // cout<<start<<endl;
- bfs(start);
- // cout<<"ans\n";
- cout<<ans.size()<<endl;
- for(auto x:ans){
- cout<<x<<" ";
- }
- cout<<endl;
- }
- }
Add Comment
Please, Sign In to add comment