# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
147473 | mosiashvililuka | Split the Attractions (IOI19_split) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
int z,x,d,e,ka[10],zx,m,la[100009];
vector <int> pas,v[100009];
bool bo[100009];
void dfs(int w){
if(ka[zx]==0) return;
bo[w]=1;
pas[w]=zx;
ka[zx]--;
if(ka[zx]==0) return;
for(vector <int>::iterator it=v[w].begin(); it!=v[w].end(); it++){
if(bo[(*it)]==1) continue;
dfs((*it));
if(ka[zx]==0) return;
}
}
int main(){
int n,a,b,c;
vector <int> p,q;
cin>>n>>m>>a>>b>>c;
pas.resize(n);
ka[1]=a;
ka[2]=b;
ka[3]=c;
zx=0;
for(int h=0; h<m; h++){
cin>>d>>e;
p.push_back(d);
q.push_back(e);
v[p[h]].push_back(q[h]);
v[q[h]].push_back(p[h]);
}
zx=0;
for(d=0; d<n; d++){
if(v[d].size()!=1) continue;
if(bo[d]==0){
zx++;
dfs(d);
}
}
if(zx!=0){
for(d=0; d<n; d++) if(pas[d]==0) pas[d]=3;
}else{
zx=0;
for(d=0; d<n; d++){
if(bo[d]==0){
zx++;
dfs(d);
}
}
}
for(int h=0; h<n; h++) cout<<pas[h]<<" ";
}