Submission #128315

#TimeUsernameProblemLanguageResultExecution timeMemory
128315DanerZeinSimurgh (IOI17_simurgh)C++14
0 / 100
2 ms376 KiB
#include "simurgh.h"
#include<bits/stdc++.h>
using namespace std;
typedef vector<int>vi;
vector<vi> G;
int vis[7];
bool alltrue(int n){
    bool sw=0;
    for(int p=0;p<n;p++){
            if(vis[p]==0){
            sw=1;
            break;
        }
    }
    if(sw==1){
        return false;
    }
    else{
        return true;
    }
}

bool roro[7];
std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) {
	std::vector<int> rr;
	G.resize(n);
	bool sw=0;
	vi roads;
	memset(roro,false,sizeof roro);
	memset(vis,0, sizeof vis);
	if(n>=2){
        for(int i=0;i<u.size();i++){
            roads.push_back(i);
            vis[v[i]]++;
            vis[u[i]]++;
            if(n>=3){
                for(int j=i+1;j<u.size();j++){
                    roads.push_back(j);
                    vis[v[j]]++;
                    vis[u[j]]++;
                    if(n>=4){
                        for(int k=j+1;k<u.size();k++){
                            roads.push_back(k);
                            vis[v[k]]++;
                            vis[u[k]]++;
                            /*for(int l=0;l<roads.size();l++){
                                cout<<roads[l]<<" ";
                            }
                            cout<<endl;*/
                            if(n>=5){
                                for(int l=k+1;l<u.size();l++){
                                    roads.push_back(l);
                                    vis[v[l]]++;
                                    vis[u[l]]++;
                                    if(n>=6){
                                        for(int m=l+1;m<u.size();m++){
                                            roads.push_back(m);
                                            vis[v[m]]++;
                                            vis[u[m]]++;
                                            if(n>=7){
                                                for(int o=m+1;o<u.size();o++){

                                                    roads.push_back(o);
                                                    vis[v[o]]++;
                                                    vis[u[o]]++;
                                                    if(alltrue(n)){
                                                        int r=count_common_roads(roads);
                                                        if(r==n-1){
                                                            roro[i]=roro[j]=roro[k]=roro[l]=roro[m]=roro[o]=true;
                                                        }
                                                    }
                                                    vis[v[o]]--;
                                                    vis[u[o]]--;
                                                    roads.pop_back();
                                                }
                                              //  cout<<m<<" ";
                                            }
                                            else{
                                                if(alltrue(n)){
                                                    int r=count_common_roads(roads);
                                                    if(r==n-1){
                                                        roro[i]=roro[j]=roro[k]=roro[l]=roro[m]=true;
                                                    }
                                                }
                                            }
                                            vis[v[m]]--;
                                            vis[u[m]]--;
                                            roads.pop_back();
                                        }
                                      //  cout<<endl;
                                    }
                                    else{
                                        if(alltrue(n)){
                                            int r=count_common_roads(roads);
                                            if(r==n-1){
                                                roro[i]=roro[j]=roro[k]=roro[l]=true;
                                            }
                                        }
                                    }
                                    vis[v[l]]--;
                                    vis[u[l]]--;
                                    roads.pop_back();
                                }
                            }
                            else{
                                if(alltrue(n)){
                                    int r=count_common_roads(roads);
                                    if(r==n-1){
                                        roro[i]=roro[j]=roro[k]=true;
                                    }
                                }
                            }
                            vis[u[k]]--;
                            vis[v[k]]--;
                            roads.pop_back();
                        }
                    }
                    else{
                        if(alltrue(n)){
                            int r=count_common_roads(roads);
                            if(r==n-1){
                                roro[i]=roro[j]=true;
                            }
                        }
                    }
                    vis[u[j]]--;
                    vis[v[j]]--;
                    roads.pop_back();
                }
            }
            else{
                if(alltrue(n)){
                    int r=count_common_roads(roads);
                    if(r==n-1){
                        roro[i]=true;
                    }
                }
            }
            vis[u[i]]--;
            vis[v[i]]--;
            roads.pop_back();
        }
	}
    for(int i=0;i<7;i++){
        if(roro[i]==true){
            rr.push_back(i);
        }
    }
    return rr;
}
/*
static int MAXQ = 30000;

static int n, m, q = 0;
static vector<int> u, v;
static vector<bool> goal;

static void wrong_answer() {
	printf("NO\n");
	exit(0);
}

static bool is_valid(const vector<int>& r) {
	if(int(r.size()) != n - 1)
		return false;

	for(int i = 0; i < n - 1; i++)
		if (r[i] < 0 || r[i] >= m)
			return false;

	return true;
}

static int _count_common_roads_internal(const vector<int>& r) {
	if(!is_valid(r))
		wrong_answer();

	int common = 0;
	for(int i = 0; i < n - 1; i++) {
		bool is_common = goal[r[i]];
		if (is_common)
			common++;
	}

	return common;
}

int count_common_roads(const vector<int>& r) {
	q++;
	if(q > MAXQ)
		wrong_answer();

	return _count_common_roads_internal(r);
}

int main() {
	assert(2 == scanf("%d %d", &n, &m));

	u.resize(m);
	v.resize(m);

	for(int i = 0; i < m; i++)
		assert(2 == scanf("%d %d", &u[i], &v[i]));

	goal.resize(m, false);

	for(int i = 0; i < n - 1; i++) {
		int id;
		assert(1 == scanf("%d", &id));
		goal[id] = true;
	}

	vector<int> res = find_roads(n, u, v);

	if(_count_common_roads_internal(res) != n - 1)
		wrong_answer();

	printf("YES\n");

	return 0;
}

*/

Compilation message (stderr)

simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:32:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<u.size();i++){
                     ~^~~~~~~~~
simurgh.cpp:37:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for(int j=i+1;j<u.size();j++){
                               ~^~~~~~~~~
simurgh.cpp:42:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                         for(int k=j+1;k<u.size();k++){
                                       ~^~~~~~~~~
simurgh.cpp:51:48: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                                 for(int l=k+1;l<u.size();l++){
                                               ~^~~~~~~~~
simurgh.cpp:56:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                                         for(int m=l+1;m<u.size();m++){
                                                       ~^~~~~~~~~
simurgh.cpp:61:64: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                                                 for(int o=m+1;o<u.size();o++){
                                                               ~^~~~~~~~~
simurgh.cpp:27:7: warning: unused variable 'sw' [-Wunused-variable]
  bool sw=0;
       ^~
#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...