답안 #228628

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
228628 2020-05-02T08:15:55 Z toxic_hack Ceste (COCI17_ceste) C++14
144 / 160
2500 ms 89008 KB
// g++ -std=c++14

/*

Today might be the chance to grasp the chance to let your talent bloom.
May be tomorrow, the day after, or next year...
May be even when you are 30. I'm not sure if physique has anything to do with it
but if you think that it will never come, it probably never will.

- Tooru Oikawa.

*/


#include<bits/stdc++.h>

typedef long long ll;
typedef long double lld;
using namespace std;

#define endl "\n"
#define fi first
#define se second
#define MEMS(a,b) memset(a,b,sizeof(a))
#define _ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define __ freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#define all(c) c.begin(),c.end()
#define pii pair<int, int>

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r)
{
	uniform_int_distribution<int> uid(l, r);
	return uid(rng);
}

#define tr(...) cout<<__FUNCTION__<<' '<<__LINE__<<" = ";trace(#__VA_ARGS__, __VA_ARGS__)
template<typename S, typename T>
ostream& operator<<(ostream& out,pair<S,T> const& p){out<<'('<<p.fi<<", "<<p.se<<')';return out;}

template<typename T>
ostream& operator<<(ostream& out,vector<T> const& v){
ll l=v.size();for(ll i=0;i<l-1;i++)out<<v[i]<<' ';if(l>0)out<<v[l-1];return out;}

template <typename T>
ostream &operator<<(ostream &out, set<T> const &v) {
    for (auto i = v.begin(); i != v.end(); i++)
        out << (*i) << ' ';
    return out;
}
template <typename T>
ostream &operator<<(ostream &out, multiset<T> const &v) {
    for (auto i = v.begin(); i != v.end(); i++)
        out << (*i) << ' ';
    return out;
}
template <typename T, typename V>
ostream &operator<<(ostream &out, map<T, V> const &v) {
    for (auto i = v.begin(); i != v.end(); i++)
        out << "\n" << (i->first) <<  ":"  << (i->second);
    return out;
}

template<typename T>
void trace(const char* name, T&& arg1){cout<<name<<" : "<<arg1<<endl;}

template<typename T, typename... Args>
void trace(const char* names, T&& arg1, Args&&... args){
const char* comma = strchr(names + 1, ',');cout.write(names, comma-names)<<" : "<<arg1<<" | ";trace(comma+1,args...);}

#define int ll

const int N = 2020;

struct edg {
    int v, t, c;
};

vector<vector<edg>> g(N);
int n, m;
int ans[N];
const int INF = 1e18;
map<int, int> d[N];
int tim[N];
void dijkstra(int s) {
    for (int i = 1; i <= n; i++) {
        ans[i] = INF;
        tim[i] = INF;
    }
    d[s][0] = 0;
    priority_queue<pair<int, pii>, vector<pair<int, pii>>, greater<pair<int, pii>>> q;
    q.push({0, {0, s}});
    while (!q.empty()) {
        int v = q.top().se.se;
        int d_v = q.top().fi;
        int t_v = q.top().se.fi;
        ans[v] = min(ans[v], d_v * t_v);
        q.pop();
        if (d_v != d[v][t_v])
            continue;

        if (tim[v] <= t_v) continue;
        tim[v] = t_v;

        for (auto edge : g[v]) {
            int to = edge.v;
            int tim = t_v + edge.t;
            int len = edge.c;
            if (d[to].count(tim)) {
                if (d[to][tim] > d_v + len) {
                    d[to][tim] = d_v + len;
                    q.push({d[to][tim], {tim, to}});
                }
            } else {
                d[to][tim] = d_v + len;
                q.push({d[to][tim], {tim, to}});
            }
        }
    }
    for (int i = 1;  i<= n; i++) {
        if (ans[i] == INF) {
            ans[i] = -1;
        }
    }
}

int solve() {
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int a, b, t, c; 
        cin >> a >> b >> t >> c;
        g[a].push_back({b, t, c});
        g[b].push_back({a, t, c});
    }   
    dijkstra(1);
    for (int i = 2; i <= n; i++) {
        cout << ans[i] << endl;
    }
    return 0;
}

int32_t main(){ _
    int t;
    // cin >> t;
    t = 1;
    while (t--) solve();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 1024 KB Output is correct
2 Correct 13 ms 1664 KB Output is correct
3 Correct 20 ms 2304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 126 ms 7152 KB Output is correct
2 Correct 288 ms 11036 KB Output is correct
3 Correct 466 ms 20316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 926 ms 53000 KB Output is correct
2 Execution timed out 2585 ms 73380 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 405 ms 23472 KB Output is correct
2 Correct 2421 ms 75916 KB Output is correct
3 Correct 53 ms 6008 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2080 ms 89008 KB Output is correct
2 Correct 1676 ms 64360 KB Output is correct
3 Correct 1410 ms 56740 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1372 ms 60692 KB Output is correct
2 Correct 1262 ms 53924 KB Output is correct
3 Correct 1956 ms 69116 KB Output is correct