CSES - KILO 2018 4/5 - Results
Submission details
Task:Ping
Sender:ArktinenKarpalo
Submission time:2018-09-27 17:55:07 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.03 sdetails
#2ACCEPTED0.02 sdetails
#3ACCEPTED0.74 sdetails
#4ACCEPTED0.20 sdetails
#5ACCEPTED0.29 sdetails
#6ACCEPTED0.67 sdetails
#7ACCEPTED0.68 sdetails
#8ACCEPTED0.25 sdetails
#9ACCEPTED0.48 sdetails
#10ACCEPTED0.30 sdetails
#11ACCEPTED0.12 sdetails
#12ACCEPTED0.14 sdetails
#13ACCEPTED0.12 sdetails
#14ACCEPTED0.12 sdetails
#15ACCEPTED0.54 sdetails
#16ACCEPTED0.47 sdetails
#17ACCEPTED0.14 sdetails

Code

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
#define M 100000007
#define N (1<<17)
#define P complex<long long>
#define X real()
#define Y imag()

using namespace std;

int n, q, p, f, ff, fff;
pair<pair<int,int>, int> v[101010];
multiset<pair<int,int>> st[101010]; // 1 = mihin, 2 = cost

ll dist[101010];
int z[101010];
ll dijkstra() {
	for(int i=1; i<=n; i++) {
		z[i] = 0;
		dist[i] = 1e9+1;
	}
	dist[1] = 0;
	priority_queue<pair<ll, int>> pq;
	pq.push(make_pair(0, 1));
	while(!pq.empty()) {
		int s = pq.top().second;
		ll cst = -pq.top().first;
		pq.pop();
		if(z[s])
			continue;
		z[s] = 1;
		for(auto u:st[s]) {
			if(cst+u.second < dist[u.first]) {
				dist[u.first] = cst+u.second;
				pq.push(make_pair(-dist[u.first], u.first));
			}
		}
	}
	return dist[n];
}

int main() {
	cin.tie(0);
	cout.tie(0);
	ios_base::sync_with_stdio(0);
	cin >> n >> q >> p;
	for(int i=0; i<q; i++) {
		cin >> f >> ff >> fff;
		v[i] = make_pair(make_pair(f, ff), fff);	
	}
	int a = 0;
	int b = q-1;
	int nyton = -1;
	int cnt = 0;
	while(a<=b) {
		cnt++;
		int c = (a+b)/2;
		while(nyton<c) {
			nyton++;
			int mista = v[nyton].first.first;
			int mihin = v[nyton].first.second;
			int maksaa = v[nyton].second;
			st[mista].insert(make_pair(mihin, maksaa));
			st[mihin].insert(make_pair(mista, maksaa));
		}
		while(nyton>c) {
			int mista = v[nyton].first.first;
			int mihin = v[nyton].first.second;
			int maksaa = v[nyton].second;
			st[mista].erase(st[mista].find(make_pair(mihin, maksaa)));
			st[mihin].erase(st[mihin].find(make_pair(mista, maksaa)));
			nyton--;
		}
		if(dijkstra()<=p)
			b = c-1;
		else
			a = c+1;
	}
		while(nyton<a+1) {
			nyton++;
			int mista = v[nyton].first.first;
			int mihin = v[nyton].first.second;
			int maksaa = v[nyton].second;
			st[mista].insert(make_pair(mihin, maksaa));
			st[mihin].insert(make_pair(mista, maksaa));
		}
		while(nyton>a+1) {
			int mista = v[nyton].first.first;
			int mihin = v[nyton].first.second;
			int maksaa = v[nyton].second;
			st[mista].erase(st[mista].find(make_pair(mihin, maksaa)));
			st[mihin].erase(st[mihin].find(make_pair(mista, maksaa)));
			nyton--;
		}
	if(dijkstra()<=p)
		cout << a+1;
	else
		cout << "QAQ";
}

Test details

Test 1

Verdict: ACCEPTED

input
4 5 4
1 4 5
2 1 1
4 3 2
1 3 2
...

correct output
4

user output
4

Test 2

Verdict: ACCEPTED

input
4 3 4
1 3 2
3 4 3
2 4 1

correct output
QAQ

user output
QAQ

Test 3

Verdict: ACCEPTED

input
79228 100000 609719088
71059 11143 686695
68230 2527 877907
53438 29888 202308
3549 78720 356072
...

correct output
95914

user output
95914

Test 4

Verdict: ACCEPTED

input
54105 100000 146069808
21034 33530 208067
31369 39373 438341
53601 30432 458004
44664 29661 964679
...

correct output
47249

user output
47249

Test 5

Verdict: ACCEPTED

input
27534 100000 630452185
4554 20869 156656
18125 16857 129766
7327 23355 162783
12208 19586 330973
...

correct output
37629

user output
37629

Test 6

Verdict: ACCEPTED

input
100000 100000 1896201
37633 24342 686408
21326 35599 18816
68870 92002 748527
87772 68354 816268
...

correct output
QAQ

user output
QAQ

Test 7

Verdict: ACCEPTED

input
100000 100000 2753856
28301 86840 226813
23531 88963 140812
81527 28867 31169
81346 50536 187421
...

correct output
QAQ

user output
QAQ

Test 8

Verdict: ACCEPTED

input
100000 100000 8894369
96437 89061 279201
93127 41538 16340
5646 70264 970395
96240 15676 526054
...

correct output
89568

user output
89568

Test 9

Verdict: ACCEPTED

input
100000 100000 8920310
51576 49748 441411
75379 58501 720057
77269 34775 380776
45446 74022 804975
...

correct output
94792

user output
94792

Test 10

Verdict: ACCEPTED

input
5000 100000 699655
4460 4283 850197
3421 2128 903580
3335 401 848289
4975 4482 241023
...

correct output
58358

user output
58358

Test 11

Verdict: ACCEPTED

input
5000 100000 2906768
4100 2619 553305
4947 1462 263251
1703 4236 286383
4228 4797 635722
...

correct output
12392

user output
12392

Test 12

Verdict: ACCEPTED

input
5000 100000 8525016
4452 4625 772169
4941 929 373626
2610 379 935441
3007 4 402654
...

correct output
16113

user output
16113

Test 13

Verdict: ACCEPTED

input
5000 100000 6672172
2548 393 274388
1269 4076 230068
24 3024 596999
4658 2589 401693
...

correct output
3674

user output
3674

Test 14

Verdict: ACCEPTED

input
100000 100000 1000000000
61435 73156 809653003
31805 69457 997174565
46138 4746 664487503
77749 57316 726729812
...

correct output
QAQ

user output
QAQ

Test 15

Verdict: ACCEPTED

input
70000 100000 389981
69496 42899 329
42449 25317 445
2446 37175 175
4791 27488 51
...

correct output
71694

user output
71694

Test 16

Verdict: ACCEPTED

input
70000 100000 7413515
66481 13331 14
34935 8021 953
66946 55602 904
49080 1580 157
...

correct output
82046

user output
82046

Test 17

Verdict: ACCEPTED

input
20000 100000 100000000
1 2 10000
2 3 10000
3 4 10000
4 5 10000
...

correct output
50001

user output
50001