Submission #783989

#TimeUsernameProblemLanguageResultExecution timeMemory
783989ZHIRDILBILDIZCyberland (APIO23_cyberland)C++17
0 / 100
434 ms8208 KiB
#include<bits/stdc++.h>
#include "cyberland.h"
#define ll long long
#define fi first
#define se second
using namespace std ;
const int N = 1e5 ;
bool us[N] ;
double dist[N] ;
vector<pair<int, int>> v[N] ;
set<pair<double, int>> s ;
void deikstra()
{
    for(int i = 0 ; i < N ; i++)
        dist[i] = 1e18 ;
    for(auto i : s)
        dist[i.se] = 0 ;
    while(s.size())
    {
        pair<double, int> p = *s.begin() ;
        s.erase(s.begin()) ;
        if(us[p.se])
            continue ;
        us[p.se] = 1 ;
        for(auto i : v[p.se])
        {
            if(us[i.fi] || dist[i.fi] <= p.fi + i.se)
                continue ;
            dist[i.fi] = p.fi + i.se ;
            s.insert({dist[i.fi], i.fi}) ;
        }
    }
}
double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> arr)
{
    bool flag1 = 0, flag2 = 0 ;
    s.clear() ;
    for(int i = 0 ; i < n ; i++)
    {
        v[i].clear() ;
        us[i] = 0 ;
        dist[i] = 0 ;
        if(arr[i] != 1)flag1 = 1 ;
        if(arr[i] == 2)flag2 = 1 ;
    }
    for(int i = 0 ; i < m ; i++)
    {
        v[x[i]].push_back({y[i], c[i]}) ;
        v[y[i]].push_back({x[i], c[i]}) ;
    }
    if(!flag1)
    {
        deikstra() ;
        if(dist[h] == 1e18)
            return -1 ;
        else
            return dist[h] ;
    }
    if(!flag2)
    {
        us[h] = 1 ;
        s.insert({0, 0}) ;
        deikstra() ;
        for(int i = 0 ; i < n ; i++)
        {
            if(!arr[i] && us[i])
                s.insert({0, i}) ;
            us[i] = 0 ;
        }
        deikstra() ;
        if(dist[h] == 1e18)
            return -1 ;
        else
            return dist[h] ;
    }
}
//signed main()
//{
//    ios_base::sync_with_stdio( 0 ) ;
//    cin.tie( 0 ) ;
//    cout.tie( 0 ) ;
//    int t ;
//    cin >> t ;
//    while(t--)
//    {
//        int n, m, k, h ;
//        cin >> n >> m >> k >> h ;
//        vector<int> a(m), b(m), c(m), arr(n) ;
//        for(int i = 0 ; i < n ; i++)
//            cin >> arr[i] ;
//        for(int i = 0 ; i < m ; i++)
//            cin >> a[i] >> b[i] >> c[i] ;
//        cout << fixed << setprecision(9) << solve(n, m, k, h, a, b, c, arr) << '\n' ;
//    }
//    return 0 ;
//}

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:76:1: warning: control reaches end of non-void function [-Wreturn-type]
   76 | }
      | ^
#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...