結果
問題 |
No.3056 Disconnected Coloring
|
ユーザー |
![]() |
提出日時 | 2025-03-14 23:53:38 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,563 bytes |
コンパイル時間 | 3,434 ms |
コンパイル使用メモリ | 281,436 KB |
実行使用メモリ | 8,832 KB |
最終ジャッジ日時 | 2025-03-14 23:53:56 |
合計ジャッジ時間 | 16,676 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 12 WA * 9 RE * 13 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<b;i++) #define rrep(i,a,b) for(int i=a;i>=b;i--) #define fore(i,a) for(auto&i:a) #define ff first #define ss second #define pb push_back #define all(a) begin(a),end(a) using vi=vector<int>; using vll=vector<long long>; using ll=long long; using pii=pair<int,int>; using pll=pair<long long,long long>; inline bool ingrid(int a,int b,int h,int w){ return 0<=a&&a<h&&0<=b&&b<w; } int n,m; vi u,v; void solve(){ if(m&1){ cout<<-1<<endl; return; } vector<int> deg(n); vector<int> g1(n),gn(n); rep(i,0,m){ if(pii(u[i],v[i])==pii(0,n-1)){ cout<<-1<<endl; return; } if(u[i]==0){ g1[v[i]]=1; } if(v[i]==n-1){ gn[i]=1; } deg[u[i]]++; deg[v[i]]++; } vector<int> ans(m,-1); if(max(deg[0],deg[n-1])<=m/2){ vi cnt(2); int k{}; vector<int> flag(n); rep(i,0,n){ if(g1[i]&&gn[i]){ k++; flag[i]=1; } } rep(i,0,m){ if(u[i]==0&&flag[v[i]]){ ans[i]=0; cnt[0]++; } if(v[i]==n-1&&flag[u[i]]){ ans[i]=1; cnt[1]++; } } if(k>m/2){ cout<<-1<<endl; return; } if(deg[0]<=m/2){ rep(i,0,m){ if(ans[i]!=-1)continue; if(u[i]!=0)continue; ans[i]=0; cnt[0]++; } rep(i,0,m){ if(ans[i]!=-1)continue; if(v[i]!=n-1)continue; if(cnt[0]>=m/2)continue; ans[i]=0; cnt[0]++; } rep(i,0,m){ if(ans[i]!=-1)continue; ans[i]=1; cnt[1]++; } }else{ rep(i,0,m){ if(ans[i]!=-1)continue; if(v[i]!=n-1)continue; ans[i]=1; cnt[1]++; } rep(i,0,m){ if(ans[i]!=-1)continue; if(u[i]!=0)continue; if(cnt[1]>=m/2)continue; ans[i]=1; cnt[1]++; } rep(i,0,m){ if(ans[i]!=-1)continue; ans[i]=0; cnt[0]++; } } } else{ vi cnt(2); if(deg[0]<=m/2){ rep(i,0,m){ if(u[i]==0){ ans[i]=0; cnt[0]++; } } }else{ rep(i,0,m){ if(v[i]==n-1){ ans[i]=0; cnt[0]++; } } } rep(i,0,m){ if(u[i]!=0&&v[i]!=n-1){ cnt[1]++; ans[i]=1; } } rep(i,0,m){ if(ans[i]!=-1)continue; if(cnt[0]+1<=m/2){ cnt[0]++; ans[i]=0; }else { cnt[1]++; ans[i]=1; } } assert(cnt[0]==m/2&&cnt[1]==m/2); } rep(i,0,m){ cout<<(ans[i]?'B':'R'); } cout<<endl; } int main(){ cin>>n>>m; u.resize(m);v.resize(m); rep(i,0,m){ cin>>u[i]>>v[i];u[i]--;v[i]--; if(u[i]>v[i])swap(u[i],v[i]); } solve(); return 0; } /* */