답안 #114314

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
114314 2019-05-31T20:10:58 Z MohamedAhmed04 Ceste (COCI17_ceste) C++14
160 / 160
480 ms 12948 KB
#include <bits/stdc++.h>
 
using namespace std;
 
const int MAXN = 2010 , MAXT = MAXN * MAXN;
 
struct edge
{
    int to , time , cost ;
    edge(int ve , int ti , int co)
    {
        to = ve ;
        time = ti ;
        cost = co ;
    }
};
 
vector< vector<edge> >adj(MAXN) ;
long long ans[MAXN] , tillnow[MAXN] ;
int n , m ;

int main()
{
    scanf("%d %d" , &n,  &m) ;
    int a , b , c , d ;
    for(int i = 0 ; i < m ; ++i)
    {
        scanf("%d %d %d %d" , &a , &b , &c , &d) ;
        adj[a].push_back(edge(b , c , d)) ;
        adj[b].push_back(edge(a , c , d)) ;
    }
    long long cons = 1e17 ;
    for(int i = 1 ; i <= n ; ++i)
        ans[i] = cons , tillnow[i] = 1e17;
    priority_queue< pair<int , pair<int , int> > , vector< pair<int , pair<int , int>  > > , greater< pair<int , pair<int , int> > > >q ;
    q.push({0 , {0 , 1}}) ;
    while(!q.empty())
    {
        pair<int , pair<int , int> >p = q.top() ; 
        q.pop() ;
        int node = p.second.second , sumc = p.first , sumt = p.second.first ;
        ans[node] = min(ans[node] , (sumt * 1ll) * (sumc * 1ll)) ;
        if(sumt > tillnow[node])
            continue;
        tillnow[node] = sumt ;
        for(auto &child : adj[node])
        {
            int nto = child.to ;
            int ntime = child.time + sumt;
            int ncost = child.cost + sumc;
            if(ntime >= MAXT)
                continue ;
            q.push({ncost , {ntime , nto}}) ;
        }
    }
    for(int i = 2 ; i <= n ; ++i)
    {
        if(ans[i] == cons)
            ans[i] = -1 ;
        printf("%lld\n" , ans[i]);
    }
    return 0 ;
}

Compilation message

ceste.cpp: In function 'int main()':
ceste.cpp:24:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d" , &n,  &m) ;
     ~~~~~^~~~~~~~~~~~~~~~~~~
ceste.cpp:28:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d %d" , &a , &b , &c , &d) ;
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 5 ms 512 KB Output is correct
3 Correct 6 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 1276 KB Output is correct
2 Correct 51 ms 2040 KB Output is correct
3 Correct 64 ms 2168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 161 ms 2160 KB Output is correct
2 Correct 480 ms 12948 KB Output is correct
3 Correct 8 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 54 ms 984 KB Output is correct
2 Correct 290 ms 6716 KB Output is correct
3 Correct 13 ms 612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 924 KB Output is correct
2 Correct 207 ms 2304 KB Output is correct
3 Correct 184 ms 2160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 195 ms 2172 KB Output is correct
2 Correct 185 ms 2156 KB Output is correct
3 Correct 268 ms 2160 KB Output is correct