| 15559 | 2025-02-20 12:35:57 | Ablablabla | Autópálya infláció | cpp17 | Elfogadva 100/100 | 1.19s | 1632 KiB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
const int MAXN = 3000;
struct pont{
int akt, elozo, ind, suly, hossz;
};
struct ut{
int elozo, ind, suly, hossz;
};
//vector<vector<vector<int>>> utak; // elozo, ind, suly, hossz
vector<ut> utak[MAXN];
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){
ut akt1 = utak[a][b], akt2 = utak[c][d];
if(egy > ket){ // egyben messzebb vagyunk
kul = (kul - elso.suly)*2 - akt1.suly;
elso.suly = 0;
a = akt1.elozo;
b = akt1.ind;
egy--;
} else if(egy < ket){
kul = (kul + masod.suly)*2 + akt2.suly;
masod.suly = 0;
c = akt2.elozo;
d = akt2.ind;
ket--;
} else{
kul = (kul - elso.suly + masod.suly)*2 - akt1.suly + akt2.suly;
elso.suly = 0;
a = akt1.elozo;
b = akt1.ind;
egy--;
masod.suly = 0;
c = akt2.elozo;
d = akt2.ind;
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";
ut egy = utak[akt][ind];
vissza = ((vissza*2) % MOD + egy.suly) % MOD;
akt = egy.elozo;
ind = egy.ind;
}
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().hossz <= 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";
}
}
| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Elfogadva | 26ms | 1156 KiB | ||||
| subtask2 | 8/8 | ||||||
| 3 | Elfogadva | 8ms | 908 KiB | ||||
| 4 | Elfogadva | 19ms | 916 KiB | ||||
| 5 | Elfogadva | 10ms | 1012 KiB | ||||
| 6 | Elfogadva | 7ms | 820 KiB | ||||
| 7 | Elfogadva | 56ms | 876 KiB | ||||
| subtask3 | 15/15 | ||||||
| 8 | Elfogadva | 1ms | 500 KiB | ||||
| 9 | Elfogadva | 1ms | 316 KiB | ||||
| 10 | Elfogadva | 1ms | 316 KiB | ||||
| 11 | Elfogadva | 1ms | 332 KiB | ||||
| 12 | Elfogadva | 1ms | 316 KiB | ||||
| 13 | Elfogadva | 1ms | 316 KiB | ||||
| 14 | Elfogadva | 1ms | 316 KiB | ||||
| 15 | Elfogadva | 1ms | 316 KiB | ||||
| 16 | Elfogadva | 1ms | 316 KiB | ||||
| 17 | Elfogadva | 1ms | 316 KiB | ||||
| 18 | Elfogadva | 1ms | 316 KiB | ||||
| subtask4 | 34/34 | ||||||
| 19 | Elfogadva | 17ms | 1076 KiB | ||||
| 20 | Elfogadva | 54ms | 956 KiB | ||||
| 21 | Elfogadva | 59ms | 1048 KiB | ||||
| 22 | Elfogadva | 32ms | 1012 KiB | ||||
| 23 | Elfogadva | 28ms | 964 KiB | ||||
| 24 | Elfogadva | 105ms | 820 KiB | ||||
| 25 | Elfogadva | 12ms | 1076 KiB | ||||
| 26 | Elfogadva | 8ms | 1308 KiB | ||||
| 27 | Elfogadva | 94ms | 872 KiB | ||||
| 28 | Elfogadva | 20ms | 820 KiB | ||||
| 29 | Elfogadva | 26ms | 832 KiB | ||||
| 30 | Elfogadva | 61ms | 820 KiB | ||||
| 31 | Elfogadva | 45ms | 936 KiB | ||||
| 32 | Elfogadva | 158ms | 996 KiB | ||||
| 33 | Elfogadva | 160ms | 820 KiB | ||||
| subtask5 | 21/21 | ||||||
| 34 | Elfogadva | 4ms | 564 KiB | ||||
| 35 | Elfogadva | 7ms | 756 KiB | ||||
| 36 | Elfogadva | 6ms | 564 KiB | ||||
| 37 | Elfogadva | 6ms | 564 KiB | ||||
| 38 | Elfogadva | 4ms | 748 KiB | ||||
| 39 | Elfogadva | 4ms | 556 KiB | ||||
| 40 | Elfogadva | 67ms | 708 KiB | ||||
| 41 | Elfogadva | 56ms | 644 KiB | ||||
| 42 | Elfogadva | 2ms | 748 KiB | ||||
| 43 | Elfogadva | 3ms | 756 KiB | ||||
| 44 | Elfogadva | 3ms | 564 KiB | ||||
| 45 | Elfogadva | 3ms | 564 KiB | ||||
| 46 | Elfogadva | 2ms | 564 KiB | ||||
| 47 | Elfogadva | 2ms | 564 KiB | ||||
| 48 | Elfogadva | 4ms | 564 KiB | ||||
| 49 | Elfogadva | 4ms | 564 KiB | ||||
| subtask6 | 22/22 | ||||||
| 50 | Elfogadva | 27ms | 972 KiB | ||||
| 51 | Elfogadva | 26ms | 1056 KiB | ||||
| 52 | Elfogadva | 27ms | 1076 KiB | ||||
| 53 | Elfogadva | 21ms | 1172 KiB | ||||
| 54 | Elfogadva | 13ms | 1124 KiB | ||||
| 55 | Elfogadva | 13ms | 1116 KiB | ||||
| 56 | Elfogadva | 1.19s | 1588 KiB | ||||
| 57 | Elfogadva | 833ms | 1632 KiB | ||||
| 58 | Elfogadva | 7ms | 564 KiB | ||||
| 59 | Elfogadva | 14ms | 892 KiB | ||||
| 60 | Elfogadva | 16ms | 860 KiB | ||||
| 61 | Elfogadva | 19ms | 820 KiB | ||||
| 62 | Elfogadva | 20ms | 1004 KiB | ||||
| 63 | Elfogadva | 13ms | 852 KiB | ||||
| 64 | Elfogadva | 68ms | 916 KiB | ||||
| 65 | Elfogadva | 68ms | 840 KiB | ||||
| 66 | Elfogadva | 196ms | 860 KiB | ||||