| 15555 | 2025-02-20 12:29:44 | Ablablabla | Autópálya infláció | cpp17 | Time limit exceeded 78/100 | 2.099s | 1888 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(){
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 | 109ms | 1188 KiB | ||||
| subtask2 | 8/8 | ||||||
| 3 | Accepted | 43ms | 820 KiB | ||||
| 4 | Accepted | 123ms | 820 KiB | ||||
| 5 | Accepted | 37ms | 908 KiB | ||||
| 6 | Accepted | 24ms | 1000 KiB | ||||
| 7 | Accepted | 149ms | 824 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 | 328 KiB | ||||
| 14 | Accepted | 1ms | 316 KiB | ||||
| 15 | Accepted | 1ms | 316 KiB | ||||
| 16 | Accepted | 1ms | 316 KiB | ||||
| 17 | Accepted | 1ms | 332 KiB | ||||
| 18 | Accepted | 1ms | 316 KiB | ||||
| subtask4 | 34/34 | ||||||
| 19 | Accepted | 86ms | 908 KiB | ||||
| 20 | Accepted | 361ms | 928 KiB | ||||
| 21 | Accepted | 425ms | 916 KiB | ||||
| 22 | Accepted | 209ms | 988 KiB | ||||
| 23 | Accepted | 194ms | 1136 KiB | ||||
| 24 | Accepted | 541ms | 1076 KiB | ||||
| 25 | Accepted | 50ms | 1080 KiB | ||||
| 26 | Accepted | 32ms | 1232 KiB | ||||
| 27 | Accepted | 597ms | 820 KiB | ||||
| 28 | Accepted | 112ms | 864 KiB | ||||
| 29 | Accepted | 134ms | 820 KiB | ||||
| 30 | Accepted | 351ms | 820 KiB | ||||
| 31 | Accepted | 250ms | 1012 KiB | ||||
| 32 | Accepted | 885ms | 888 KiB | ||||
| 33 | Accepted | 893ms | 820 KiB | ||||
| subtask5 | 21/21 | ||||||
| 34 | Accepted | 8ms | 508 KiB | ||||
| 35 | Accepted | 32ms | 564 KiB | ||||
| 36 | Accepted | 25ms | 564 KiB | ||||
| 37 | Accepted | 25ms | 576 KiB | ||||
| 38 | Accepted | 17ms | 564 KiB | ||||
| 39 | Accepted | 17ms | 564 KiB | ||||
| 40 | Accepted | 523ms | 616 KiB | ||||
| 41 | Accepted | 449ms | 564 KiB | ||||
| 42 | Accepted | 4ms | 316 KiB | ||||
| 43 | Accepted | 7ms | 316 KiB | ||||
| 44 | Accepted | 7ms | 316 KiB | ||||
| 45 | Accepted | 7ms | 316 KiB | ||||
| 46 | Accepted | 6ms | 316 KiB | ||||
| 47 | Accepted | 8ms | 316 KiB | ||||
| 48 | Accepted | 14ms | 316 KiB | ||||
| 49 | Accepted | 14ms | 496 KiB | ||||
| subtask6 | 0/22 | ||||||
| 50 | Accepted | 87ms | 1080 KiB | ||||
| 51 | Accepted | 105ms | 1080 KiB | ||||
| 52 | Accepted | 112ms | 972 KiB | ||||
| 53 | Accepted | 90ms | 1076 KiB | ||||
| 54 | Accepted | 41ms | 1076 KiB | ||||
| 55 | Accepted | 41ms | 1260 KiB | ||||
| 56 | Time limit exceeded | 2.099s | 1800 KiB | ||||
| 57 | Time limit exceeded | 2.099s | 1888 KiB | ||||
| 58 | Accepted | 25ms | 564 KiB | ||||
| 59 | Accepted | 50ms | 820 KiB | ||||
| 60 | Accepted | 59ms | 820 KiB | ||||
| 61 | Accepted | 79ms | 820 KiB | ||||
| 62 | Accepted | 71ms | 820 KiB | ||||
| 63 | Accepted | 59ms | 820 KiB | ||||
| 64 | Accepted | 340ms | 820 KiB | ||||
| 65 | Accepted | 335ms | 820 KiB | ||||
| 66 | Accepted | 1.057s | 820 KiB | ||||