Josif_tepe

Untitled

Oct 10th, 2025
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <vector>
  5. #include <bits/stdc++.h>
  6. #include <algorithm>
  7. using namespace std;
  8. const int maxn = 1e5 + 10;
  9. int n, m;
  10. vector<int> graph[maxn];
  11. map<pair<int, int>, int> edge_color;
  12. int degColor[maxn][4];
  13. bool visited[maxn];
  14.  
  15. void dfs(int node, int color) {
  16.     if(visited[node]) {
  17.         return;
  18.     }
  19.     visited[node] = true;
  20.    
  21.     for(int neighbour: graph[node]) {
  22.         if(edge_color[{node, neighbour}] != 3) continue;
  23.         if(degColor[neighbour][color] != 0) continue;
  24.    
  25.         edge_color[{node, neighbour}] = color;
  26.         edge_color[{neighbour, node}] = color;
  27.        
  28.         degColor[node][color]++;
  29.        
  30.         degColor[neighbour][color]++;
  31.        
  32.         dfs(neighbour, 3 - color);
  33.         break;
  34.    
  35.     }
  36.    
  37. }
  38.  
  39. bool cmp(int a, int b) {
  40.     return (int) graph[a].size() > (int) graph[b].size();
  41. }
  42. int main() {
  43.     ios_base::sync_with_stdio(false);
  44.     cin >> n >> m;
  45.     memset(degColor, 0, sizeof degColor);
  46.     vector<int> A(m), B(m);
  47.     for(int i = 0; i < m; i++) {
  48.         cin >> A[i] >> B[i];
  49.        
  50.         int a = A[i] - 1;
  51.         int b = B[i] - 1;
  52.         graph[a].push_back(b);
  53.         graph[b].push_back(a);
  54.        
  55.         // 3 - uncolored edge
  56.         edge_color[{a, b}] = 3;
  57.         edge_color[{b, a}] = 3;
  58.        
  59.     }
  60.    
  61.     vector<int> vertices(n);
  62.     for(int i = 0; i < n; i++) {
  63.         sort(graph[i].begin(), graph[i].end(), cmp);
  64.         vertices[i] = i;
  65.     }
  66.    
  67.     sort(vertices.begin(), vertices.end(), cmp);
  68.    
  69.     for(int i = 0; i < n; i++) {
  70.         int node = vertices[i];
  71.         if(degColor[node][1] == 0) {
  72.             memset(visited, false, sizeof visited);
  73.             dfs(node, 1);
  74.         }
  75.        
  76.         if(degColor[node][2] == 0) {
  77.             memset(visited, false, sizeof visited);
  78.             dfs(node, 2);
  79.         }
  80.     }
  81.    
  82.  
  83.     for(int i = 0; i < m; i++) {
  84.         int a = A[i] - 1;
  85.         int b = B[i] - 1;
  86.        
  87.         if(edge_color[{a, b}] == 3) {
  88.             if(degColor[a][1] == 0 or degColor[b][1] == 0) {
  89.                 degColor[a][1]++;
  90.                 degColor[b][1]++;
  91.                 edge_color[{a, b}] = 1;
  92.                 edge_color[{b, a}] = 1;
  93.             }
  94.             else {
  95.                 degColor[a][2]++;
  96.                 degColor[b][2]++;
  97.                 edge_color[{a, b}] = 2;
  98.                 edge_color[{b, a}] = 2;
  99.             }
  100. }
  101.        
  102.     }
  103.    
  104.     for(int i = 0; i < n; i++) {
  105.         if(degColor[i][1] + degColor[i][2] >= 2 and (degColor[i][1] == 0 or degColor[i][2] == 0)) {
  106.             cout << 0 << endl;
  107.             return 0;
  108.         }
  109.     }
  110.  
  111.     for(int i = 0; i < m; i++) {
  112.         int a = A[i] - 1, b = B[i] - 1;
  113.         cout << edge_color[{a, b}];
  114.     }
  115.    
  116.    
  117.     return 0;
  118. }
  119.  
Advertisement
Add Comment
Please, Sign In to add comment