Submission #754461

#TimeUsernameProblemLanguageResultExecution timeMemory
754461HaciyevAlikCyberland (APIO23_cyberland)C++17
5 / 100
22 ms4068 KiB
#include "cyberland.h"
#include <bits/stdc++.h>
const int mx=5;
std::vector<std::pair<int,int>> g[mx];
int used[mx];
void dfs(int u) {
    used[u]=1;
    for(int i=0;i<(int)g[u].size();++i) {
        std::pair<int,int> v=g[u][i];
        if(!used[v.first]) {
            dfs(v.first);
        }
    }
}
double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) {
    for(int i=0;i<mx;++i) g[i].clear();
    memset(used,0,sizeof(used));
    for(int i=0;i<M;++i) {
        int u=x[i],v=y[i],w=c[i];
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    double ans1=0,ans2=0;
    dfs(0);
    if(!used[H]) return -1;
    if(H==1) {
        bool f=0,F=0;
        for(int i=0;i<(int)g[0].size();++i) {
            if(g[0][i].first==1) {
                f=1;
                ans1+=g[0][i].second; break;
            }
        }
        for(int i=0;i<(int)g[0].size();++i) {
            if(g[0][i].first==2) {
                ans2+=g[0][i].second;
                if(arr[2]==0) {
                    ans2=0;
                } else if(arr[2]==2) {
                    ans2/=2;
                }
                for(int j=0;j<(int)g[2].size();++j) {
                    if(g[2][j].first==1) {
                        F=1;
                        ans2+=g[2][j].second;
                    }
                }
            }
        }
        if(f&&F) return std::min(ans1,ans2);
        if(!f&&F) return ans2;
        if(f&&!F) return ans1;
    } else {
        bool f=0,F=0;
        for(int i=0;i<(int)g[0].size();++i) {
            if(g[0][i].first==2) {
                f=1;
                ans1+=g[0][i].second; break;
            }
        }
        for(int i=0;i<(int)g[0].size();++i) {
            if(g[0][i].first==1){
                ans2+=g[0][i].second;
                if(arr[1]==0) {
                    ans2=0;
                } else if(arr[1]==2) {
                    ans2/=2;
                }
                for(int j=0;j<(int)g[1].size();++j) {
                    if(g[1][j].first==2){
                        ans2+=g[1][j].second; F=1;
                    }
                }
            }
        }
        if(f&&F) return std::min(ans1,ans2);
        if(!f&&F) return ans2;
        if(f&&!F) return ans1;
    }
}

Compilation message (stderr)

cyberland.cpp: In function 'double solve(int, int, int, int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
cyberland.cpp:80:1: warning: control reaches end of non-void function [-Wreturn-type]
   80 | }
      | ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...