1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| # include <bits/stdc++.h>
using namespace std;
typedef long long ll; typedef double db;
# define mp(a,b) make_pair(a,b)
# define x(a) a.first
# define y(a) a.second
# define b(a) a.begin()
# define e(a) a.end()
# define sz(a) int((a).size())
# define pb(a) push_back(a)
const int inf=0x3f3f3f3f; const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=5e3,M=1e5; vector<int> e[N+7]; int f[N+7][N+7],mk[N+7];
int d[N+7],ct[N+7],co[3][N+7]; void Dfs(int u,int t,int cn){ d[u]=t,ct[u]=cn,co[t][cn]++; for(int v:e[u]) if(!d[v]) Dfs(v,3-t,cn); else if(d[u]+d[v]!=3) puts("NO"),exit(0); }
int main(){ int n,m; scanf("%d%d",&n,&m); int a,b,c; scanf("%d%d%d",&a,&b,&c); for(int i=1;i<=m;i++){ int u,v; scanf("%d%d",&u,&v); e[u].pb(v),e[v].pb(u); } int w=0; f[0][0]=1; for(int i=1;i<=n;i++)if(!d[i]){ Dfs(i,1,++w); for(int j=n;j>=0;j--){ if(j+co[1][w]<=n&&f[w-1][j]) f[w][j+co[1][w]]=1; if(j+co[2][w]<=n&&f[w-1][j]) f[w][j+co[2][w]]=1; } } if(!f[w][b]) return puts("NO"),0; else puts("YES"); for(int i=w,j=b;i>=1;i--){ if(j-co[1][i]>=0&&f[i-1][j-co[1][i]]) mk[i]=1,j-=co[1][i]; else if(j-co[2][i]>=0&&f[i-1][j-co[2][i]]) mk[i]=2,j-=co[2][i];
} for(int i=1;i<=n;i++) if(mk[ct[i]]==1){ if(d[i]==1) printf("2"); else { if(a) printf("1"),a--; else printf("3"); } } else { if(d[i]==2) printf("2"); else { if(a) printf("1"),a--; else printf("3"); } } puts(""); return 0; }
|