Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
38059 | LYLAKIOI | 【BJ】T2 | C++ | 解答错误 | 0 | 3 MS | 7768 KB | 2684 | 2025-06-12 14:53:04 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define m_p make_pair #define p_b push_back #define pi pair<int,int> #define p1 first #define p2 second using namespace std; typedef long long ll; const int maxn=3e5+10; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,l[maxn],r[maxn],p; vector<int>E[maxn]; struct _ { int op,i,l,r; _(){} _(int _op,int _i,int _l,int _r){op=_op,i=_i,l=_l,r=_r;} }d[maxn]; namespace dsu { int fa[maxn]; int fd(int u){if(u==fa[u])return u;return fa[u]=fd(fa[u]);} void mg(int x,int y){ x=fd(x),y=fd(y);++p,fa[p]=p; E[p].p_b(x),E[p].p_b(y);fa[x]=p,fa[y]=p; } } bool check(int S){ up(i,n+1,p)E[i].clear();p=n; up(i,1,n)dsu::fa[i]=i; int mask=0; up(i,1,m){ if(d[i].op==1)dsu::mg(d[i].i,d[i].l); else if(d[i].op==2)mask|=1<<d[i].i; else { int cnt=0; up(j,1,n)if(dsu::fd(j)==dsu::fd(d[i].i))cnt+=((S>>j)&1)&&(!((mask>>j)&1)); if(cnt<d[i].l||cnt>d[i].r)return 0; } } return 1; } int vis[maxn]; int L[maxn],R[maxn],ans[maxn]; void dfs(int u){ vis[u]=1; if(u<=n)r[u]=1; for(int x:E[u])dfs(x),l[u]+=l[x],r[u]+=r[x]; l[u]=max(l[u],L[u]),r[u]=min(r[u],R[u]); if(l[u]>r[u]){ printf("NO\n"); exit(0); } } int dfs2(int u,int fl,int fr){ fl=max(fl,l[u]),fr=min(fr,r[u]); if(u<=n)return ans[u]=fl; int tot=dfs2(E[u][0],fl-r[E[u][1]],fr-l[E[u][1]]); tot+=dfs2(E[u][1],fl-tot,fr-tot); return tot; } void slv(){ n=read(),m=read(); up(i,1,m){ int op=read(),x=read(),l=(op!=2)?read():0,r=(op==3)?read():0; d[i]=_(op,x,l,r); } if(n<=20){ for(int i=0;i<(1<<n+1);i+=2)if(check(i)){ printf("YES\n"); up(j,1,n)printf("%c",((i>>j)&1)?'R':'B'); return; } printf("NO\n"); } else { p=n;up(i,1,n)dsu::fa[i]=i; up(i,1,2*n)L[i]=-1e9,R[i]=1e9; up(i,1,m){ if(d[i].op==1)dsu::mg(d[i].i,d[i].l); else d[i].i=dsu::fd(d[i].i),L[d[i].i]=max(L[d[i].i],d[i].l),R[d[i].i]=min(R[d[i].i],d[i].r); } down(i,p,1)if(!vis[i])dfs(i),dfs2(i,0,1e9); printf("YES\n"); up(i,1,n)printf("%c",ans[i]?'R':'B'); } } int main(){ //freopen("marble.in","r",stdin),freopen("marble.out","w",stdout); slv(); return 0; }