結果

問題 No.3056 Disconnected Coloring
ユーザー wsrtrt
提出日時 2025-03-14 23:54:27
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 3,566 bytes
コンパイル時間 3,853 ms
コンパイル使用メモリ 281,812 KB
実行使用メモリ 8,704 KB
最終ジャッジ日時 2025-03-14 23:54:41
合計ジャッジ時間 12,899 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 18 WA * 16
権限があれば一括ダウンロードができます

ソースコード

diff #

#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[u[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;
}
/*
*/
0