Submission #51835

#TimeUsernameProblemLanguageResultExecution timeMemory
51835ernestvwSimurgh (IOI17_simurgh)C++11
13 / 100
3064 ms844 KiB
#include <bits/stdc++.h>
using namespace std;

#include "simurgh.h"
//int count_common_roads(vector<int> r);

struct Arc {
	int u, v, i;
};

int nbNodes, nbArcs;
vector<Arc> arcs;
vector<Arc> adj[501];
map<pair<int, int>, int> idx;

vector<int> sol, cur;
bool found = 0;

int parent[501];
int f(int x){return parent[x]==x?x:(parent[x]=f(parent[x]));}
void m(int x, int y){parent[f(x)]=f(y);}

bool ok() {
	if((int)cur.size()!=nbNodes-1)return false;
	for(int i = 0; i < nbNodes; i++) parent[i] = i;
	for(int i : cur)
		if(f(arcs[i].u) != f(arcs[i].v)) m(arcs[i].u, arcs[i].v);
	int l=-1;
	for(int i = 0; i < nbNodes; i++){
		if(f(i) != l) {
			if(l == -1) l = f(i);
			else return false;
		}
	}
	return true;
}

void find(int i) {
	if(i == nbArcs) {
		if(ok() and count_common_roads(cur) == nbNodes - 1) {
			sol = cur;
			found = true;
		}
		return;
	}
	if(found) return;
	if((int)cur.size() < nbNodes - 1) {
		cur.push_back(i);
		find(i + 1);
		cur.pop_back();
	}
	find(i + 1);
}

vector<int> find_roads(int n, vector<int> u, vector<int> v) {
	nbNodes = n;
	nbArcs = (int)u.size();
	arcs.clear();
	for(int i = 0; i < nbArcs; i++) {
		arcs.push_back({u[i], v[i], i});
		adj[u[i]].push_back({u[i], v[i], i});
		adj[v[i]].push_back({v[i], u[i], i});
	}
	find(0);
	return sol;
}
/*
bool GOLDEN[501*250];
int count_common_roads(vector<int> r) {
	int cnt(0);
	for(int i:r)if(GOLDEN[i])cnt++;
	return cnt;
}

int main() {
	int T=1;
	while(T--){
	int n, m;cin>>n>>m;
	vector<int>u(m), v(m);
	for(int i=0;i<m;i++){
		cin>>u[i]>>v[i];
	}
	for(int i=0;i<m;i++)GOLDEN[i]=0;
	for(int i=0;i<n-1;i++){int s;cin>>s;GOLDEN[s]=1;}
	vector<int> sol = find_roads(n, u, v);
	for(int i : sol) {
		cout << i << " ";
	}
	cout << endl;
	}
}
*/
#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...