제출 #162990

#제출 시각아이디문제언어결과실행 시간메모리
162990MinnakhmetovToll (BOI17_toll)C++14
56 / 100
3042 ms26892 KiB
#include <bits/stdc++.h>
    
#define ll long long
#define all(aaa) aaa.begin(), aaa.end()
 
using namespace std;

struct E {
	int a, b, w;
};

const int N = 1e6 + 5, INF = 1e9;
E e[N];
int d[N], ans[N], used[N];
vector<pair<int, int>> v[N];
int fl = 0;
 
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);

    int n, m, k, o;
    cin >> k >> n >> m >> o;

    for (int i = 0; i < m; i++) {
    	cin >> e[i].a >> e[i].b >> e[i].w;
    }

    sort(e, e + m, [](E x, E y) {
    	return x.a < y.a;
    });

    for (int i = 0; i < o; i++) {
    	int x, y;
    	cin >> x >> y;
    	v[x].push_back({y, i});
    }

    for (int i = 0, p = 0; i < n; i++) {
    	if (!v[i].empty()) {

    		while (p < m && e[p].a < i)
    			p++;
    		
    		fl++;

	    	d[i] = 0;
	    	used[i] = fl;

	    	for (int j = p; j < m; j++) {
	    		if (used[e[j].a] == fl) {
	    			if (used[e[j].b] != fl) {
	    				d[e[j].b] = INF;
	    				used[e[j].b] = fl;
	    			}
	    			d[e[j].b] = min(d[e[j].b], d[e[j].a] + e[j].w);
	    		}
	    	}

	    	for (auto p : v[i]) {
	    		if (used[p.first] == fl)
	    			ans[p.second] = d[p.first];
	    		else
	    			ans[p.second] = -1;
	    	}
    	}
    }

    for (int i = 0; i < o; i++) {
    	cout << ans[i] << "\n";
    }

    return 0;
}
#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...