제출 #1339140

#제출 시각아이디문제언어결과실행 시간메모리
1339140settopSimurgh (IOI17_simurgh)C++20
13 / 100
2 ms344 KiB
#include "simurgh.h"
#include<bits/stdc++.h>

using namespace std;

#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
const int MAXN=10;
typedef pair<int,int> pii;

int n,pai[MAXN];
vector<pii> g[MAXN];
vector<int> curset,ans;
bool z[MAXN];

int find(int x){
	return x==pai[x]?x:find(pai[x]);
}

void join(int a,int b){
	a=find(a),b=find(b);
	pai[a]=b;
}

void bt(int x){
	if(x==n){	
		if(count_common_roads(curset)==n-1) ans=curset;
		return;
	}
	for(auto [u,j]:g[x]){
		if(find(u)!=find(x)){
			int k=find(u);
			join(u,x);
			curset.pb(j);
			bt(x+1);
			curset.pop_back();
			pai[k]=k;
		}
	}
}

std::vector<int> find_roads(int N, std::vector<int> u, std::vector<int> v){
	n=N;
	fall(i,0,sz(u)-1){
		g[u[i]].pb({v[i],i}),g[v[i]].pb({u[i],i});
	}
	fall(i,0,n-1) pai[i]=i;
	bt(1);
	return ans;
}
#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...