제출 #151441

#제출 시각아이디문제언어결과실행 시간메모리
151441beso123Split the Attractions (IOI19_split)C++14
11 / 100
117 ms13136 KiB
#include<bits/stdc++.h>
using namespace std;
int m,zx,z,x,d,e,used[100009],ka[10],la[100009];
vector <int> pas,g[100009];
void DFS(int v){
	if(ka[zx]==0)
        return;
	used[v]=1;
	pas[v]=zx;
	ka[zx]--;
	if(ka[zx]==0)
	return;
	for(vector <int>::iterator it=g[v].begin(); it!=g[v].end(); it++){
		if(used[(*it)]==1){
		DFS((*it));
		if(ka[zx]==0)
		return;
		}
	}
}
void DFS1(int v){
	if(ka[zx]==0)
        return;
	used[v]=1;
	pas[v]=zx;
	ka[zx]--;
	if(ka[zx]==0)
	return;
	for(vector <int>::iterator it=g[v].begin(); it!=g[v].end(); it++){
		if(used[(*it)]==1)
		continue;
		DFS1((*it));
		if(ka[zx]==0)
		return;
	}
}
vector <int> find_split(int n, int a, int b, int c, vector <int> p, vector <int> q){
	pas.resize(n);
	ka[1]=a;
	ka[2]=b;
	ka[3]=c;
	zx=0;
	m=p.size();
	for(int k=0;k<q.size();k++){
		g[p[k]].push_back(q[k]);
		g[q[k]].push_back(p[k]);
	}
	if(a!=1){
	zx=0;
	for(int k=0;k<n;k++){
		if(g[k].size()!=1)
            continue;
		if(used[k]==0){
			zx++;
			DFS(k);
		}
	}
	if(zx!=0){
	for(int k=0;k<n;k++)
        if(pas[k]==0)
        pas[k]=3;
	}
	else{
	    zx=0;
	    for(int k=0;k<n;k++){
	        if(used[k]==0){
	            zx++;
	            DFS(k);
	            break;
	        }
	    }
	    for(int k=0;k<n;k++){
	    	if(used[k]==1){
	    		for(vector <int>::iterator it=g[k].begin();it!=g[k].end(); it++){
					if(used[(*it)]==1)
                        continue;
					zx++;
					DFS((*it));
					break;
				}
				if(zx==2)
				break;
			}
		}
		for(int k=0;k<n;k++){
	        if(used[k]==0){
	            zx++;
	            DFS(k);
	            break;
	        }
	    }
	}
	}else{
		zx=2;
		DFS1(0);
		for(int k=0;k<n;k++){
			if(pas[k]==0){
            pas[k]=1;
			break;
			}
		}
		for(int k=0;k<n;k++)
            if(pas[k]==0)
            pas[k]=3;
	}
	return pas;

}
/*main(){
vector <int> v=find_split(9, 4, 2, 3, {0, 0, 0, 0, 0, 0, 1, 3, 4, 5},
{1, 2, 3, 4, 6, 8, 7, 7, 5, 6});
for(auto i : v)
    cout<<i<<' ';
    return 0;
}*/

컴파일 시 표준 에러 (stderr) 메시지

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:44:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int k=0;k<q.size();k++){
              ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...