이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "simurgh.h"
#include <bits/stdc++.h>
#define forn(i,n) for (int i = 0;i<int(n);i++)
#define ff first
#define ss second
using namespace std;
typedef pair<int,int> pii;
typedef pair<int,pii> ppi;
int n,m;
bool flag = false;
vector <int> adj[1000],ans,u,v;
bool vis[10]={false};
int check(int idx){
vis[idx]=true;
int tmp = 0;
forn(i,adj[idx].size()){
int to = adj[idx][i];
if (vis[to])
continue;
tmp += check(to) + 1;
}
return tmp;
}
vector<int> vec(int ar){
vector<int> res;
forn(i,32){
if ((1<<i)&ar)
res.push_back(i);
}
return res;
}
void _try(int idx,int num,int sor){
if (num == n-1){
fill(vis,vis+10,false);
if (check(0)==n-1){
if (count_common_roads(vec(sor)) == n-1){
ans = vec(sor);
flag = true;
}
}
return;
}
if (idx == m)
return;
adj[u[idx]].push_back(v[idx]);
adj[v[idx]].push_back(u[idx]);
_try(idx+1,num+1,sor | (1<<idx));
adj[u[idx]].pop_back();
adj[v[idx]].pop_back();
if (flag)
return;
_try(idx+1,num,sor);
}
std::vector<int> find_roads(int N, std::vector<int> U, std::vector<int> V) {
n = N;
u=U,v=V;
m=u.size();
_try(0,0,0);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |