Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define ok puts("OK");
- using namespace std;
- const int N = (int)3e5 + 7;
- int par[N], sz[N];
- int ans[N];
- int getpar(int a) {
- if (par[a] == a) return a;
- return par[a] = getpar(par[a]);
- }
- void connect(int a, int b) {
- a = getpar(a);
- b = getpar(b);
- if (a != b) {
- if (sz[a] > sz[b]) swap(a, b);
- par[a] = b;
- sz[b] += sz[a];
- }
- }
- vector <int> gr[N], ngr[N];
- int n, m;
- int pos[N], used[N];
- vector <int> order;
- void finish() {
- puts("NO");
- exit(0);
- }
- void dfs(int v, int pr) {
- used[v] = 1;
- for (int to : ngr[v]) {
- if (to == v || to == pr) continue;
- if (used[to] == 1) {
- finish();
- } else if (used[to] == 2) {
- continue;
- }
- dfs(to, v);
- }
- used[v] = 2;
- order.push_back(v);
- }
- main() {
- iota(par, par + N, 0);
- fill(sz, sz + N, 1);
- iota(pos, pos + N, 0);
- scanf("%d %d", &n, &m);
- for (int i = 1, u, v; i <= m; i++) {
- scanf("%d %d", &u, &v);
- gr[u].push_back(v);
- gr[v].push_back(u);
- }
- for (int i = 1; i <= n; i++) {
- gr[i].push_back(i);
- sort(gr[i].begin(), gr[i].end());
- }
- sort(pos + 1, pos + n + 1, [&](const int &A, const int &B) {
- return gr[A] < gr[B];
- });
- for (int i = 2; i <= n; i++) {
- if (gr[pos[i]] == gr[pos[i - 1]])
- connect(pos[i - 1], pos[i]);
- }
- for (int i = 1; i <= n; i++) {
- if (i != getpar(i)) continue;
- for (int to : gr[i]) {
- if (i != getpar(to)) {
- ngr[i].push_back(getpar(to));
- }
- }
- sort(ngr[i].begin(), ngr[i].end());
- ngr[i].resize(unique(ngr[i].begin(), ngr[i].end()) - ngr[i].begin());
- }
- int st = -1;
- for (int i = 1; i <= n; i++) {
- if (ngr[i].size() <= 1 && i == getpar(i)) st = i;
- }
- if (st == -1)
- finish();
- dfs(st, st);
- for (int i = 1; i <= n; i++) {
- if (i != getpar(i)) continue;
- if (ngr[i].size() > 2)
- finish();
- }
- int cur = 1;
- for (int to : order) {
- ans[to] = cur++;
- }
- puts("YES");
- for (int i = 1; i <= n; i++) {
- printf("%d ", ans[getpar(i)]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement