Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int kMaxN = 5e5 + 7;
- vector<int> adj[kMaxN];
- set<int> adj2[kMaxN];
- pair<int, int> degree[kMaxN];
- vector<pair<int, int> > adj3[kMaxN];
- int par[kMaxN];
- vector<pair<int, int> > edges;
- int pos[kMaxN];
- bool cmp(pair<int, int> lvalue, pair<int, int> rvalue){
- if(lvalue.first != rvalue.first)
- return lvalue.first < rvalue.first;
- return lvalue.second > rvalue.second;
- }
- void solve(){
- int n, m;
- cin >> n >> m;
- for(int i = 1; i <= n; ++i){
- adj[i].clear();
- adj2[i].clear();
- adj3[i].clear();
- }
- edges.clear();
- for(int i = 1; i <= m; ++i){
- int u, v;
- cin >> u >> v;
- edges.push_back({u, v});
- adj[u].push_back(v);
- adj[v].push_back(u);
- }
- for(int i = 1; i <= n; ++i)
- degree[i] = {adj[i].size(), i};
- sort(degree + 1, degree + 1 + n);
- reverse(degree + 1, degree + 1 + n);
- for(int i = 1; i <= n; ++i)
- pos[degree[i].second] = i;
- for(pair<int, int> edge: edges){
- int u = edge.first, v = edge.second;
- //cout << u << " " << v << " edge" << endl;
- adj3[u].push_back({pos[v], v});
- adj3[v].push_back({pos[v], u});
- adj2[u].insert(v);
- adj2[v].insert(u);
- }
- for(int i = 1; i <= n; ++i){
- sort(adj3[i].begin(), adj3[i].end());
- //reverse(adj3[i].begin(), adj3[i].end());
- }
- int root = degree[1].second, cnt = m;
- par[root] = 0;
- for(int i = 2; i <= n; ++i){
- int u = degree[i].second;
- if(adj3[u].empty()){
- cout << "No\n";
- return;
- }
- if(adj3[u][0].second != root){
- cout << "No\n";
- return;
- }
- int curr = root;
- for(int j = 1; j < adj3[u].size(); ++j){
- if(!adj2[curr].count(u)){
- cout << "No\n";
- return;
- }
- --cnt;
- if(pos[adj3[u][j].second] > pos[u]){
- ++cnt;
- break;
- }
- curr = adj3[u][j].second;
- }
- if(!adj2[curr].count(u)){
- cout << "No\n";
- return;
- }
- par[u] = curr;
- --cnt;
- }
- if(cnt){
- cout << "No\n";
- return;
- }
- cout << "Yes\n";
- for(int i = 1; i <= n; ++i)
- cout << par[i] << " ";
- cout << "\n";
- }
- int main(){
- //ios::sync_with_stdio(false);
- //cin.tie(NULL);
- int t;
- cin >> t;
- while(t--)
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement