This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 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... |