| 15556 | 2025-02-20 12:31:18 | Ablablabla | Autópálya infláció | cpp17 | Time limit exceeded 78/100 | 2.099s | 1912 KiB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
struct pont{
int akt, elozo, ind, suly, hossz;
};
vector<vector<vector<int>>> utak; // elozo, ind, suly, hossz
ll kulonbseg(pont elso, pont masod){
int egy = elso.hossz, ket = masod.hossz;
ll kul = 0; // a - b
int a = elso.elozo, b = elso.ind, c = masod.elozo, d = masod.ind;
while(egy > 0 || ket > 0){
vector<int> akt1 = utak[a][b], akt2 = utak[c][d];
if(egy > ket){ // egyben messzebb vagyunk
kul = (kul - elso.suly)*2 - akt1[2];
elso.suly = 0;
a = akt1[0];
b = akt1[1];
egy--;
} else if(egy < ket){
kul = (kul + masod.suly)*2 + akt2[2];
masod.suly = 0;
c = akt2[0];
d = akt2[1];
ket--;
} else{
kul = (kul - elso.suly + masod.suly)*2 - akt1[2] + akt2[2];
elso.suly = 0;
a = akt1[0];
b = akt1[1];
egy--;
masod.suly = 0;
c = akt2[0];
d = akt2[1];
ket--;
}
if(kul < -2e9 || 2e9 < kul) return kul;
}
kul += masod.suly - elso.suly;
return kul;
}
struct comp{
bool operator()(pont a, pont b){
ll c = kulonbseg(a, b);
if(c < 0){ // a - b < 0
return 1;
} else if(c > 0){
return 0;
} else{
return a.hossz > b.hossz;
}
}
};
ll leker(int akt, int ind){
ll vissza = 0;
while(akt != 0){
//cout << akt << " " << ind << "\n";
vector<int> egy = utak[akt][ind];
vissza = ((vissza*2) % MOD + egy[2]) % MOD;
akt = egy[0];
ind = egy[1];
}
return vissza;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<vector<int>> csucsok(n, vector<int>()), elSuly(n, vector<int>());
for(int i = 0; i < m; i++){
int a, b, c;
cin >> a >> b >> c;
a--; b--;
csucsok[a].push_back(b);
elSuly[a].push_back(c);
csucsok[b].push_back(a);
elSuly[b].push_back(c);
}
priority_queue<pont, vector<pont>, comp> bejar;
bejar.push({0, 0, 0, 0, 0});
utak.assign(n, vector<vector<int>>());
vector<int> ans(n, 0);
while(!bejar.empty()){
pont egy = bejar.top();
bejar.pop();
int akt = egy.akt;
//cout << akt << "\n";
if(!utak[akt].empty() && utak[akt].back()[3] <= egy.hossz) continue;
//cout << "atjut\n";
utak[akt].push_back({egy.elozo, egy.ind, egy.suly, egy.hossz});
if(utak[akt].size() == 1){
ans[akt] = leker(akt, 0);
//cout << akt << " " << ans[akt] << "\n";
}
for(int i = 0; i < csucsok[akt].size(); i++){
bejar.push({csucsok[akt][i], akt, utak[akt].size() - 1, elSuly[akt][i], egy.hossz + 1});
}
}
for(int i = 1; i < n; i++){
cout << ans[i] << "\n";
}
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 98ms | 1132 KiB | ||||
| subtask2 | 8/8 | ||||||
| 3 | Accepted | 39ms | 1060 KiB | ||||
| 4 | Accepted | 111ms | 1012 KiB | ||||
| 5 | Accepted | 32ms | 820 KiB | ||||
| 6 | Accepted | 19ms | 1076 KiB | ||||
| 7 | Accepted | 134ms | 1024 KiB | ||||
| subtask3 | 15/15 | ||||||
| 8 | Accepted | 1ms | 316 KiB | ||||
| 9 | Accepted | 1ms | 316 KiB | ||||
| 10 | Accepted | 1ms | 316 KiB | ||||
| 11 | Accepted | 1ms | 316 KiB | ||||
| 12 | Accepted | 1ms | 316 KiB | ||||
| 13 | Accepted | 1ms | 316 KiB | ||||
| 14 | Accepted | 1ms | 316 KiB | ||||
| 15 | Accepted | 1ms | 316 KiB | ||||
| 16 | Accepted | 1ms | 316 KiB | ||||
| 17 | Accepted | 1ms | 316 KiB | ||||
| 18 | Accepted | 1ms | 316 KiB | ||||
| subtask4 | 34/34 | ||||||
| 19 | Accepted | 75ms | 1072 KiB | ||||
| 20 | Accepted | 328ms | 912 KiB | ||||
| 21 | Accepted | 384ms | 1076 KiB | ||||
| 22 | Accepted | 190ms | 968 KiB | ||||
| 23 | Accepted | 177ms | 1076 KiB | ||||
| 24 | Accepted | 500ms | 1072 KiB | ||||
| 25 | Accepted | 43ms | 1076 KiB | ||||
| 26 | Accepted | 27ms | 1316 KiB | ||||
| 27 | Accepted | 540ms | 856 KiB | ||||
| 28 | Accepted | 101ms | 1128 KiB | ||||
| 29 | Accepted | 120ms | 820 KiB | ||||
| 30 | Accepted | 316ms | 844 KiB | ||||
| 31 | Accepted | 228ms | 820 KiB | ||||
| 32 | Accepted | 814ms | 1072 KiB | ||||
| 33 | Accepted | 816ms | 900 KiB | ||||
| subtask5 | 21/21 | ||||||
| 34 | Accepted | 8ms | 316 KiB | ||||
| 35 | Accepted | 28ms | 564 KiB | ||||
| 36 | Accepted | 21ms | 568 KiB | ||||
| 37 | Accepted | 21ms | 756 KiB | ||||
| 38 | Accepted | 14ms | 564 KiB | ||||
| 39 | Accepted | 14ms | 564 KiB | ||||
| 40 | Accepted | 476ms | 596 KiB | ||||
| 41 | Accepted | 407ms | 556 KiB | ||||
| 42 | Accepted | 4ms | 316 KiB | ||||
| 43 | Accepted | 6ms | 316 KiB | ||||
| 44 | Accepted | 6ms | 508 KiB | ||||
| 45 | Accepted | 6ms | 492 KiB | ||||
| 46 | Accepted | 4ms | 316 KiB | ||||
| 47 | Accepted | 8ms | 316 KiB | ||||
| 48 | Accepted | 13ms | 316 KiB | ||||
| 49 | Accepted | 13ms | 476 KiB | ||||
| subtask6 | 0/22 | ||||||
| 50 | Accepted | 81ms | 1084 KiB | ||||
| 51 | Accepted | 94ms | 1268 KiB | ||||
| 52 | Accepted | 101ms | 1076 KiB | ||||
| 53 | Accepted | 81ms | 1076 KiB | ||||
| 54 | Accepted | 35ms | 1260 KiB | ||||
| 55 | Accepted | 35ms | 1268 KiB | ||||
| 56 | Time limit exceeded | 2.099s | 1912 KiB | ||||
| 57 | Time limit exceeded | 2.099s | 1904 KiB | ||||
| 58 | Accepted | 21ms | 564 KiB | ||||
| 59 | Accepted | 45ms | 948 KiB | ||||
| 60 | Accepted | 54ms | 904 KiB | ||||
| 61 | Accepted | 71ms | 820 KiB | ||||
| 62 | Accepted | 64ms | 820 KiB | ||||
| 63 | Accepted | 52ms | 820 KiB | ||||
| 64 | Accepted | 307ms | 1080 KiB | ||||
| 65 | Accepted | 307ms | 908 KiB | ||||
| 66 | Accepted | 962ms | 820 KiB | ||||