Submission #1021872

#TimeUsernameProblemLanguageResultExecution timeMemory
1021872nisanduuSplit the Attractions (IOI19_split)C++14
7 / 100
58 ms13436 KiB
#include "split.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
    ll A=a,B=b,C=c;
	vector<int> res(n);
	int m = p.size();
	vector<vector<int>> adj(n+2);
	vector<int> calls(n+2);
	for(int i=0;i<m;i++){
	    adj[p[i]].push_back(q[i]);
	    adj[q[i]].push_back(p[i]);
	    calls[p[i]]++;
	    calls[q[i]]++;
	}
	vector<int> vis(n+2);
	bool f=1;
	for(auto el:adj){
	    if(el.size()>2){
	        f=0;
	        break;
	    }
	}
	if(f){
    	int st = 0;
    	for(int i=0;i<n;i++){
    	    if(calls[i]==1){
    	        st=i;
    	        break;
    	    }
    	}
    	queue<int> pq;
    	pq.push(st);
    	while(!pq.empty()){
    	    int node = pq.front();
    	    pq.pop();
    	    vis[node]=1;
    	    if(a>0){
    	        res[node]=1;
    	        a--;
    	    }else if(b>0){
    	        b--;
    	        res[node]=2;
    	    }else{
    	        c--;
    	        res[node]=3;
    	    }
    	    for(auto el:adj[node]){
    	        if(!vis[el]){
    	            pq.push(el);
    	        }
    	    }
    	}
	}
	else{
	    bool f1=0;
	    if(B>C){
	        swap(B,C);
	        f1=1;
	    }
    	stack<int> ds;
    	ds.push(0);
    	vector<int> vis1(n+10);
    	while(!ds.empty()){
    	    int node = ds.top();
    	    vis1[node]=1;
    	    ds.pop();
    	    if(B>0){
    	        res[node]=f1 ? 3 : 2;
    	        B--;
    	    }else if(A>0){
    	        A--;
    	        res[node]=1;
    	    }else{
    	        res[node]=f1 ? 2 : 3;
    	    }
    	    for(auto el:adj[node]){
    	        if(!vis1[el]){
    	            ds.push(el);
    	        }
    	    }
    	}
	}
	return res;
}
#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...