제출 #791018

#제출 시각아이디문제언어결과실행 시간메모리
791018fatemetmhrSimurgh (IOI17_simurgh)C++17
13 / 100
14 ms340 KiB
//  ~ Be Name Khoda ~  //

#include "simurgh.h"
#include <bits/stdc++.h>
//#pragma GCC optimize ("O3")
//#pragma GCC target("avx2")
//#pragma GCC optimize("unroll-loops,Ofast")

using namespace std;

typedef long long ll;

#define pb       push_back
#define mp       make_pair
#define all(x)   x.begin(), x.end()
#define fi       first
#define se       second

const int maxn  =  1e6   + 10;
const int maxn5 =  9;
const int maxnt =  1.2e6 + 10;
const int maxn3 =  1e3   + 10;
const int mod   =  1e9   + 7;
const ll  inf   =  1e18;

vector <int> adj[maxn5], av;
int cnt = 0;
bool mark[maxn5];

void dfs(int v){
	mark[v] = true;
	cnt++;
	for(auto u : adj[v]) if(!mark[u])
		dfs(u);
}

std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) {
	int m = u.size();
	for(int mask = 1; mask < (1 << m); mask++) if(__builtin_popcount(mask) == n - 1){
		for(int i = 0; i < n; i++)
			adj[i].clear();
		av.clear();
		for(int i = 0; i  < m; i++) if((mask >> i)&1){
			adj[u[i]].pb(v[i]);
			adj[v[i]].pb(u[i]);
			av.pb(i);
		}
		cnt = 0;
		memset(mark, false, sizeof mark);
		dfs(0);
		if(cnt == n){
			int val = count_common_roads(av);
			if(val == n - 1)
				return av;
		}
	}
	return av;
}
#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...