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;
int vis[7];
bool alltrue(int n){
bool sw=0;
for(int p=0;p<n;p++){
if(vis[p]==0){
sw=1;
break;
}
}
if(sw==1){
return false;
}
else{
return true;
}
}
bool roro[7];
std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) {
std::vector<int> rr;
G.resize(n);
bool sw=0;
vi roads;
memset(roro,false,sizeof roro);
memset(vis,0, sizeof vis);
if(n>=2){
for(int i=0;i<u.size();i++){
roads.push_back(i);
vis[v[i]]++;
vis[u[i]]++;
if(n>=3){
for(int j=i+1;j<u.size();j++){
roads.push_back(j);
vis[v[j]]++;
vis[u[j]]++;
if(n>=4){
for(int k=j+1;k<u.size();k++){
roads.push_back(k);
vis[v[k]]++;
vis[u[k]]++;
/*for(int l=0;l<roads.size();l++){
cout<<roads[l]<<" ";
}
cout<<endl;*/
if(n>=5){
for(int l=k+1;l<u.size();l++){
roads.push_back(l);
vis[v[l]]++;
vis[u[l]]++;
if(n>=6){
for(int m=l+1;m<u.size();m++){
roads.push_back(m);
vis[v[m]]++;
vis[u[m]]++;
if(n>=7){
for(int o=m+1;o<u.size();o++){
roads.push_back(o);
vis[v[o]]++;
vis[u[o]]++;
if(alltrue(n)){
int r=count_common_roads(roads);
if(r==n-1){
roro[i]=roro[j]=roro[k]=roro[l]=roro[m]=roro[o]=true;
}
}
vis[v[o]]--;
vis[u[o]]--;
roads.pop_back();
}
// cout<<m<<" ";
}
else{
if(alltrue(n)){
int r=count_common_roads(roads);
if(r==n-1){
roro[i]=roro[j]=roro[k]=roro[l]=roro[m]=true;
}
}
}
vis[v[m]]--;
vis[u[m]]--;
roads.pop_back();
}
// cout<<endl;
}
else{
if(alltrue(n)){
int r=count_common_roads(roads);
if(r==n-1){
roro[i]=roro[j]=roro[k]=roro[l]=true;
}
}
}
vis[v[l]]--;
vis[u[l]]--;
roads.pop_back();
}
}
else{
if(alltrue(n)){
int r=count_common_roads(roads);
if(r==n-1){
roro[i]=roro[j]=roro[k]=true;
}
}
}
vis[u[k]]--;
vis[v[k]]--;
roads.pop_back();
}
}
else{
if(alltrue(n)){
int r=count_common_roads(roads);
if(r==n-1){
roro[i]=roro[j]=true;
}
}
}
vis[u[j]]--;
vis[v[j]]--;
roads.pop_back();
}
}
else{
if(alltrue(n)){
int r=count_common_roads(roads);
if(r==n-1){
roro[i]=true;
}
}
}
vis[u[i]]--;
vis[v[i]]--;
roads.pop_back();
}
}
for(int i=0;i<7;i++){
if(roro[i]==true){
rr.push_back(i);
}
}
return rr;
}
/*
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 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:32:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<u.size();i++){
~^~~~~~~~~
simurgh.cpp:37:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=i+1;j<u.size();j++){
~^~~~~~~~~
simurgh.cpp:42:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int k=j+1;k<u.size();k++){
~^~~~~~~~~
simurgh.cpp:51:48: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int l=k+1;l<u.size();l++){
~^~~~~~~~~
simurgh.cpp:56:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int m=l+1;m<u.size();m++){
~^~~~~~~~~
simurgh.cpp:61:64: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int o=m+1;o<u.size();o++){
~^~~~~~~~~
simurgh.cpp:27:7: warning: unused variable 'sw' [-Wunused-variable]
bool sw=0;
^~
# | 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... |