Advertisement
fooker

graph_coloring

Apr 22nd, 2023
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. // url: https://atcoder.jp/contests/abc299/tasks/abc299_e
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define ll long long
  5. ll dist[2001][2001];
  6. int main()
  7. {
  8.     ios_base::sync_with_stdio(false);
  9.     cin.tie(0);
  10.     cout.tie(0);
  11.     ll n,m;
  12.     cin>>n>>m;
  13.     vector <ll> adj[n+1];
  14.     bool ans=true;
  15.     ll color[n+1];
  16.     for (ll i=1; i<=n; i++) color[i]=-1;
  17.     for (ll i=1,x,y; i<=m; i++){
  18.         cin>>x>>y;
  19.         adj[x].push_back(y);
  20.         adj[y].push_back(x);
  21.     }
  22.     for (ll i=1; i<=n; i++){
  23.         bool visited[n+1]={0};
  24.         visited[i]=true;
  25.         queue<ll> q;
  26.         q.push(i);
  27.         while(!q.empty()){
  28.             ll s=q.front();
  29.             q.pop();
  30.             for (auto u:adj[s]){
  31.                 if (visited[u]) continue;
  32.                 visited[u]=true;
  33.                 dist[i][u]=dist[i][s]+1;
  34.                 q.push(u);
  35.             }
  36.         }
  37.     }
  38.     ll k;
  39.     cin>>k;
  40.     if (k==0){
  41.         color[1]=1;
  42.     }
  43.     else {
  44.         vector<ll> W,B;
  45.         ll x[k+1], y[k+1];
  46.         for (ll i=1; i<=k; i++){
  47.             cin>>x[i]>>y[i];
  48.             for (ll j=1; j<=n; j++){
  49.                 if (dist[x[i]][j]<y[i]) W.push_back(j);
  50.                 if (dist[x[i]][j]==y[i]) B.push_back(j);
  51.             }
  52.             for (auto u:W){
  53.                 if (color[u]==-1){
  54.                     color[u]=0;
  55.                 }
  56.                 if (color[u]==2){
  57.                     color[u]=0;
  58.                 }
  59.             }
  60.             for (auto u:B){
  61.                 if (color[u]==-1){
  62.                     color[u]=2;
  63.                 }
  64.             }
  65.             W.clear();
  66.             B.clear();
  67.         }
  68.         for (ll i=1; i<=k; i++){
  69.             for (ll j=1; j<=n; j++){
  70.                 if (dist[x[i]][j]==y[i]) B.push_back(j);
  71.             }
  72.             bool pass=false;
  73.             for (auto u:B){
  74.                 if (color[u]==2){
  75.                     color[u]=1;
  76.                     pass=true;
  77.                 }
  78.             }
  79.             if (!pass){
  80.                 ans=false;
  81.                 break;
  82.             }
  83.             B.clear();
  84.         }
  85.     }
  86.     for (ll i=1; i<=n; i++){
  87.         if (color[i]==-1){
  88.             color[i]=0;
  89.         }
  90.         if (color[i]==2){
  91.             color[i]=1;
  92.         }
  93.     }
  94.     if (ans){
  95.         cout<<"Yes\n";
  96.         for (ll i=1; i<=n; i++){
  97.             cout<<color[i];
  98.         }
  99.     }
  100.     else {
  101.         cout<<"No";
  102.     }
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement