Submission #128373

#TimeUsernameProblemLanguageResultExecution timeMemory
128373DanerZeinSimurgh (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;
bool vis[7],rg[22];
void dfs(int u){
    vis[u]=1;
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i];
        if(vis[v]==false){
            dfs(v);
        }
    }
}
std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) {
	std::vector<int> r;
	int t=u.size();
	for(int i=0;i<(1<<t);i++){
        int c=0;
        G.clear();
        G.resize(n);
        vector<int>rr;
        for(int j=0;j<t;j++){
            if(i&(1<<j)){
           //     cout<<"1";
                rr.push_back(j);
                c++;
                G[u[j]].push_back(v[j]);
                G[v[j]].push_back(u[j]);
            }
            else{
         //       cout<<"0";
            }
        }
       // cout<<endl;
        if(c==n-1){
            dfs(0);
            bool sw=0;
            for(int j=0;j<7;j++){
                if(vis[j]==false){
                    sw=1;
                    break;
                }
            }
            if(sw==0){
                if(count_common_roads(rr)==n-1){
                    for(int j=0;j<t;j++){
                        if(i&(1<<j)){
                            //cout<<"1";
                            rg[j]=true;
                        }
                        else{
                           // cout<<"0";
                        }
                    }
                    //cout<<endl;
                    break;
                }
            }
        }
	}
	//cout<<"a"<<endl;
	for(int i=0;i<u.size();i++){
        if(rg[i]==true){
            //cout<<i<<" ";
            r.push_back(i);
        }
	}
	//cout<<endl;
	return r;
}
/*
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 'void dfs(int)':
simurgh.cpp:9:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<G[u].size();i++){
                 ~^~~~~~~~~~~~
simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:64:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<u.size();i++){
              ~^~~~~~~~~
#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...