| 16085 | 2025-03-30 20:27:23 | szil | Autópálya infláció | cpp17 | Időlimit túllépés 36/100 | 2.099s | 6132 KiB |
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll MOD = 1e9+7;
const int MAXN = 3001;
const int MAXM = 6001;
const int BLOCK_CNT = 55;
const int BLOCK_SIZE = 60;
const ll MULTI = (1ll<<(1+BLOCK_SIZE))%MOD;
struct bigint {
vector<uint64_t> data;
bigint() {
data.assign(BLOCK_CNT, ~0ull);
}
void clear() {
data.assign(BLOCK_CNT, 0ull);
}
bool operator<(const bigint &rhs) {
for (int i = 0; i < BLOCK_CNT; i++) {
if (data[i] != rhs.data[i]) {
return data[i] < rhs.data[i];
}
}
return 0;
}
bigint operator+(const bigint &rhs) {
bigint res;
res.clear();
bool carry = 0;
for (int i = BLOCK_CNT-1; i >= 0; i--) {
res.data[i] = data[i] + rhs.data[i] + carry;
carry = (res.data[i] >> (BLOCK_SIZE + 1)) & 1;
res.data[i] &= ~(1ull << (BLOCK_SIZE + 1));
}
return res;
}
void inflate() {
bool carry = 0;
for (int i = BLOCK_CNT-1; i >= 0; i--) {
bool next_carry = (data[i] >> BLOCK_SIZE) & 1;
data[i] &= ~(1ull << BLOCK_SIZE);
data[i] <<= 1;
data[i] |= carry;
carry = next_carry;
}
}
ll calc_ans() {
ll ans = 0;
ll mul = 1;
for (int i = BLOCK_CNT-1; i >= 0; i--) {
data[i] %= MOD;
ans += data[i] * mul;
ans %= MOD;
mul *= MULTI;
mul %= MOD;
}
return ans;
}
};
int u[MAXM], v[MAXM];
void solve() {
int n, m; cin >> n >> m;
vector<bigint> w(m+1);
for (int i = 1; i <= m; i++) {
w[i].clear();
cin >> u[i] >> v[i] >> w[i].data.back();
}
vector<bigint> dist_last(n+1);
vector<int> first_seen(n+1, n);
vector<bool> vis_last(n+1);
dist_last[1].clear();
vis_last[1] = 1;
int is_ok = -1;
first_seen[1] = 0;
for (int i = 1; i <= n; i++) {
vector<bigint> dist_curr = dist_last;
vector<bool> vis_curr = vis_last;
for (int j = 1; j <= m; j++) {
if (first_seen[u[j]] + 35 >= i && first_seen[v[j]] + 35 >= i && vis_last[u[j]] && dist_last[u[j]] + w[j] < dist_curr[v[j]]) {
dist_curr[v[j]] = dist_last[u[j]] + w[j];
vis_curr[v[j]] = 1;
first_seen[v[j]] = min(first_seen[v[j]], i);
}
}
for (int j = 1; j <= m; j++) {
if (first_seen[u[j]] + 35 >= i && first_seen[v[j]] + 35 >= i && vis_last[v[j]] && dist_last[v[j]] + w[j] < dist_curr[u[j]]) {
dist_curr[u[j]] = dist_last[v[j]] + w[j];
vis_curr[u[j]] = 1;
first_seen[u[j]] = min(first_seen[u[j]], i);
}
}
dist_last = dist_curr;
vis_last = vis_curr;
for (int j = 1; j <= m; j++) {
w[j].inflate();
}
}
for (int i = 2; i <= n; i++) {
cout << dist_last[i].calc_ans() << "\n";
}
cout << "\n";
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Időlimit túllépés | 2.092s | 5980 KiB | ||||
| subtask2 | 0/8 | ||||||
| 3 | Időlimit túllépés | 2.084s | 4404 KiB | ||||
| 4 | Időlimit túllépés | 2.082s | 4404 KiB | ||||
| 5 | Időlimit túllépés | 2.082s | 4404 KiB | ||||
| 6 | Időlimit túllépés | 2.084s | 4404 KiB | ||||
| 7 | Időlimit túllépés | 2.072s | 4404 KiB | ||||
| subtask3 | 15/15 | ||||||
| 8 | Elfogadva | 1ms | 508 KiB | ||||
| 9 | Elfogadva | 1ms | 316 KiB | ||||
| 10 | Elfogadva | 1ms | 316 KiB | ||||
| 11 | Elfogadva | 1ms | 500 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 | 0/34 | ||||||
| 19 | Időlimit túllépés | 2.099s | 5940 KiB | ||||
| 20 | Időlimit túllépés | 2.099s | 5788 KiB | ||||
| 21 | Időlimit túllépés | 2.099s | 5980 KiB | ||||
| 22 | Időlimit túllépés | 2.099s | 5940 KiB | ||||
| 23 | Időlimit túllépés | 2.094s | 5940 KiB | ||||
| 24 | Időlimit túllépés | 2.095s | 5880 KiB | ||||
| 25 | Időlimit túllépés | 2.096s | 5952 KiB | ||||
| 26 | Időlimit túllépés | 2.095s | 6028 KiB | ||||
| 27 | Időlimit túllépés | 2.085s | 5952 KiB | ||||
| 28 | Időlimit túllépés | 2.086s | 4404 KiB | ||||
| 29 | Időlimit túllépés | 2.086s | 4404 KiB | ||||
| 30 | Elfogadva | 1.856s | 4352 KiB | ||||
| 31 | Időlimit túllépés | 2.085s | 4404 KiB | ||||
| 32 | Időlimit túllépés | 2.079s | 6132 KiB | ||||
| 33 | Időlimit túllépés | 2.082s | 5940 KiB | ||||
| subtask5 | 21/21 | ||||||
| 34 | Elfogadva | 90ms | 1516 KiB | ||||
| 35 | Elfogadva | 156ms | 1840 KiB | ||||
| 36 | Elfogadva | 158ms | 1828 KiB | ||||
| 37 | Elfogadva | 156ms | 1820 KiB | ||||
| 38 | Elfogadva | 155ms | 1588 KiB | ||||
| 39 | Elfogadva | 157ms | 1848 KiB | ||||
| 40 | Elfogadva | 156ms | 1824 KiB | ||||
| 41 | Elfogadva | 156ms | 1588 KiB | ||||
| 42 | Elfogadva | 59ms | 1076 KiB | ||||
| 43 | Elfogadva | 61ms | 1076 KiB | ||||
| 44 | Elfogadva | 59ms | 1120 KiB | ||||
| 45 | Elfogadva | 59ms | 1264 KiB | ||||
| 46 | Elfogadva | 59ms | 1124 KiB | ||||
| 47 | Elfogadva | 54ms | 1076 KiB | ||||
| 48 | Elfogadva | 89ms | 1332 KiB | ||||
| 49 | Elfogadva | 87ms | 1332 KiB | ||||
| subtask6 | 0/22 | ||||||
| 50 | Időlimit túllépés | 2.078s | 5940 KiB | ||||
| 51 | Időlimit túllépés | 2.081s | 5940 KiB | ||||
| 52 | Időlimit túllépés | 2.078s | 5944 KiB | ||||
| 53 | Időlimit túllépés | 2.079s | 5940 KiB | ||||
| 54 | Időlimit túllépés | 2.081s | 6128 KiB | ||||
| 55 | Időlimit túllépés | 2.081s | 5940 KiB | ||||
| 56 | Időlimit túllépés | 2.081s | 5940 KiB | ||||
| 57 | Időlimit túllépés | 2.082s | 6132 KiB | ||||
| 58 | Elfogadva | 230ms | 1844 KiB | ||||
| 59 | Időlimit túllépés | 2.085s | 4404 KiB | ||||
| 60 | Időlimit túllépés | 2.085s | 4404 KiB | ||||
| 61 | Időlimit túllépés | 2.085s | 4600 KiB | ||||
| 62 | Időlimit túllépés | 2.084s | 4404 KiB | ||||
| 63 | Időlimit túllépés | 2.088s | 4588 KiB | ||||
| 64 | Időlimit túllépés | 2.088s | 5940 KiB | ||||
| 65 | Időlimit túllépés | 2.088s | 5940 KiB | ||||
| 66 | Időlimit túllépés | 2.085s | 5940 KiB | ||||