| 10488 | 2024-04-03 11:55:43 | Valaki2 | Autópálya infláció | cpp17 | Time limit exceeded 15/100 | 2.085s | 83272 KiB |
#include <bits/stdc++.h>
using namespace std;
#define distance distance1337
#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
const int maxn = 3100;
const int mod = 1e9 + 7;
const int k = 32; // log2 max c_i + epsilon
struct distance {
bitset<1 + maxn> bs;
distance() {
bs = 0;
}
distance(int num) {
if(num == -1) {
bs.set();
} else {
bs = num;
}
}
distance(bitset<1 + maxn> bs_) {
bs = bs_;
}
bool operator < (const distance &other) const {
// reversed
for(int i = maxn; i >= 0; i--) {
if(other.bs[i] ^ bs[i]) {
if(other.bs[i] > bs[i]) {
return false;
} else {
return true;
}
}
}
return false;
}
// debug
void print() {
cout << bs.to_ullong();
}
};
const distance inf = distance(-1);
int n, m;
vector<pii > graph[1 + maxn];
distance dist[1 + maxn][1 + k];
bool done[1 + maxn][1 + k];
int steps[1 + maxn];
void solve() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int a, b, c;
cin >> a >> b >> c;
graph[a].pb(mp(b, c));
graph[b].pb(mp(a, c));
}
queue<int> bfsq;
bfsq.push(1);
while(!bfsq.empty()) {
int cur = bfsq.front();
bfsq.pop();
for(pii nei : graph[cur]) {
if(nei.fi != 1 && steps[nei.fi] == 0) {
bfsq.push(nei.fi);
steps[nei.fi] = steps[cur] + 1;
}
}
}
priority_queue<pair<int, pair<distance, pii > > > q;
for(int i = 1; i <= n; i++) {
for(int j = 0; j <= k; j++) {
dist[i][j] = distance(-1);
}
}
dist[1][0].bs = 0;
q.push(mp(0, mp(dist[1][0], mp(1, 0))));
while(!q.empty()) {
pii curpair = q.top().se.se;
q.pop();
int cur = curpair.fi, cur_steps = curpair.se;
int cur_idx = cur_steps - steps[cur];
// cout << cur << " " << cur_steps << " " << cur_idx << ":\n";
if(done[cur][cur_idx]) {
continue;
}
done[cur][cur_idx] = true;
if(cur_steps >= n) {
continue;
}
for(pii nei : graph[cur]) {
int nei_idx = cur_steps + 1 - steps[nei.fi];
if(nei_idx > k) {
continue;
}
bitset<1 + maxn> tmp = (bitset<1 + maxn>(nei.se) << cur_steps);
int carry = 0;
for(int i = 0; i <= maxn; i++) {
int sum = dist[cur][cur_idx].bs[i] + tmp[i] + carry;
carry = sum / 2;
tmp[i] = sum % 2;
}
distance neidist = distance(tmp);
// distance neidist = distance(dist[cur][cur_idx].bs + (bitset<1 + maxn>(nei.se) << cur_steps));
// reversed
if(dist[nei.fi][nei_idx] < neidist) {
dist[nei.fi][nei_idx] = neidist;
q.push(mp(-(cur_steps + 1), mp(neidist, mp(nei.fi, cur_steps + 1))));
}
}
}
/*for(int i = 1; i <= n; i++) {
for(int j = 0; j <= k; j++) {
if(dist[i][j].bs[maxn] == 0) {
dist[i][j].print();
} else {
cout << "-1";
}
cout << " ";
}
cout << "\n";
}*/
for(int i = 2; i <= n; i++) {
distance ans_bs(-1);
for(int j = 0; j <= k; j++) {
ans_bs = max(ans_bs, dist[i][j]);
}
int ans = 0;
int coeff = 1;
for(int i = 0; i <= maxn; i++) {
ans += coeff * ans_bs.bs[i];
ans %= mod;
coeff = (2 * coeff) % mod;
}
cout << ans % mod << "\n";
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 35ms | 80316 KiB | ||||
| 2 | Time limit exceeded | 2.079s | 44560 KiB | ||||
| subtask2 | 0/8 | ||||||
| 3 | Time limit exceeded | 2.079s | 42036 KiB | ||||
| 4 | Time limit exceeded | 2.084s | 42236 KiB | ||||
| 5 | Time limit exceeded | 2.043s | 41792 KiB | ||||
| 6 | Time limit exceeded | 2.084s | 43352 KiB | ||||
| 7 | Time limit exceeded | 2.059s | 41412 KiB | ||||
| subtask3 | 15/15 | ||||||
| 8 | Accepted | 37ms | 81156 KiB | ||||
| 9 | Accepted | 43ms | 81152 KiB | ||||
| 10 | Accepted | 46ms | 81172 KiB | ||||
| 11 | Accepted | 45ms | 81172 KiB | ||||
| 12 | Accepted | 43ms | 81448 KiB | ||||
| 13 | Accepted | 45ms | 81344 KiB | ||||
| 14 | Accepted | 46ms | 81492 KiB | ||||
| 15 | Accepted | 37ms | 81764 KiB | ||||
| 16 | Accepted | 37ms | 81556 KiB | ||||
| 17 | Accepted | 35ms | 81604 KiB | ||||
| 18 | Accepted | 35ms | 81808 KiB | ||||
| subtask4 | 0/34 | ||||||
| 19 | Time limit exceeded | 2.059s | 45728 KiB | ||||
| 20 | Time limit exceeded | 2.072s | 44316 KiB | ||||
| 21 | Time limit exceeded | 2.072s | 43592 KiB | ||||
| 22 | Time limit exceeded | 2.063s | 45952 KiB | ||||
| 23 | Time limit exceeded | 2.055s | 45976 KiB | ||||
| 24 | Time limit exceeded | 2.075s | 42760 KiB | ||||
| 25 | Time limit exceeded | 2.055s | 45940 KiB | ||||
| 26 | Time limit exceeded | 2.079s | 45960 KiB | ||||
| 27 | Time limit exceeded | 2.055s | 42524 KiB | ||||
| 28 | Time limit exceeded | 2.059s | 42616 KiB | ||||
| 29 | Time limit exceeded | 2.079s | 42492 KiB | ||||
| 30 | Time limit exceeded | 2.059s | 42256 KiB | ||||
| 31 | Time limit exceeded | 2.052s | 42448 KiB | ||||
| 32 | Time limit exceeded | 2.072s | 42440 KiB | ||||
| 33 | Time limit exceeded | 2.068s | 42508 KiB | ||||
| subtask5 | 0/21 | ||||||
| 34 | Time limit exceeded | 2.068s | 42420 KiB | ||||
| 35 | Time limit exceeded | 2.059s | 43372 KiB | ||||
| 36 | Time limit exceeded | 2.075s | 43344 KiB | ||||
| 37 | Time limit exceeded | 2.052s | 43320 KiB | ||||
| 38 | Time limit exceeded | 2.072s | 43684 KiB | ||||
| 39 | Time limit exceeded | 2.056s | 43920 KiB | ||||
| 40 | Time limit exceeded | 2.072s | 43544 KiB | ||||
| 41 | Time limit exceeded | 2.049s | 43484 KiB | ||||
| 42 | Accepted | 1.243s | 83244 KiB | ||||
| 43 | Accepted | 1.065s | 83192 KiB | ||||
| 44 | Accepted | 1.07s | 83272 KiB | ||||
| 45 | Accepted | 1.07s | 83008 KiB | ||||
| 46 | Accepted | 1.179s | 83020 KiB | ||||
| 47 | Accepted | 1.118s | 83036 KiB | ||||
| 48 | Accepted | 1.669s | 83192 KiB | ||||
| 49 | Accepted | 1.636s | 83192 KiB | ||||
| subtask6 | 0/22 | ||||||
| 50 | Time limit exceeded | 2.055s | 43508 KiB | ||||
| 51 | Time limit exceeded | 2.072s | 45028 KiB | ||||
| 52 | Time limit exceeded | 2.063s | 46704 KiB | ||||
| 53 | Time limit exceeded | 2.069s | 46868 KiB | ||||
| 54 | Time limit exceeded | 2.029s | 46868 KiB | ||||
| 55 | Time limit exceeded | 2.061s | 46732 KiB | ||||
| 56 | Time limit exceeded | 2.085s | 43300 KiB | ||||
| 57 | Time limit exceeded | 2.079s | 43444 KiB | ||||
| 58 | Time limit exceeded | 2.026s | 83204 KiB | ||||
| 59 | Time limit exceeded | 2.069s | 43380 KiB | ||||
| 60 | Time limit exceeded | 2.049s | 43508 KiB | ||||
| 61 | Time limit exceeded | 2.076s | 43336 KiB | ||||
| 62 | Time limit exceeded | 2.048s | 43344 KiB | ||||
| 63 | Time limit exceeded | 2.075s | 43816 KiB | ||||
| 64 | Time limit exceeded | 2.048s | 43692 KiB | ||||
| 65 | Time limit exceeded | 2.048s | 43720 KiB | ||||
| 66 | Time limit exceeded | 2.048s | 43492 KiB | ||||