QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#87832#5369. 时间旅行Scintilla16 131ms3976kbC++143.8kb2023-03-14 14:58:482023-03-14 14:58:52

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-14 14:58:52]
  • 评测
  • 测评结果:16
  • 用时:131ms
  • 内存:3976kb
  • [2023-03-14 14:58:48]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define rep(i, s, e) for (int i = s; i <= e; ++i)
#define drep(i, s, e) for (int i = s; i >= e; --i)
#define file(a) freopen(#a".in", "r", stdin), freopen(#a".out", "w", stdout)
#define pv(a) cout << #a << " = " << a << endl
#define pa(a, l, r) cout << #a " : "; rep(_, l, r) cout << a[_] << ' '; cout << endl

const int N = 6e2 + 10;

int read() {
  int x = 0, f = 1; char c = getchar();
  for (; c < '0' || c > '9'; c = getchar()) if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
  return x * f;
}

int n, k;
vector <int> a[N];

int pre[N], tag[N], p[N], dfn[N], dn, ans, p0[N], ans0;
bool e[N][N], e0[N][N];
queue <int> q;

int fa[N];
int get(int u) { return u == fa[u] ? u : fa[u] = get(fa[u]); }

int LCA(int u, int v) {
  for (++ dn; ; u = pre[p[u]], swap(u, v)) {
    if (dfn[u = get(u)] == dn) return u;
    else if (u) dfn[u] = dn;
  }
}

void shrink(int u, int v, int w) {
  for (; get(u) != w; u = pre[v]) {
    pre[u] = v, v = p[u], fa[u] = fa[v] = w;
    if (tag[v] == 2) q.push(v), tag[v] = 1;
  }
}

void rev(int u) {
  if (p[pre[u]]) rev(p[pre[u]]);
  p[pre[u]] = u, p[u] = pre[u];
}

bool blossom(int s) {
  // cout << "----- blossom s = " << s << endl;
  rep(i, 1, n + 1) pre[i] = tag[i] = 0, fa[i] = i;
  q = queue <int> (), tag[s] = 1, q.push(s);
  while (q.size()) {
    int u = q.front(); q.pop();
    rep(v, 1, n + 1) if (e[u][v]) {
      if (tag[v] == 1) {
        int w = LCA(u, v);
        shrink(u, v, w), shrink(v, u, w);
      }
      else if (!tag[v]) {
        pre[v] = u, tag[v] = 2;
        if (!p[v]) {
          rev(v), ++ ans;
          return true;
        }
        tag[p[v]] = 1, q.push(p[v]);
      }
    }
  }
  return false;
}

bool check(int d) {
  // cout << "----- check d = " << d << endl;
  ans = dn = 0;
  rep(i, 1, n + 1) {
    p[i] = dfn[i] = 0;
    rep(j, 1, n + 1) e[i][j] = false;
  }
  auto adde = [&](int u, int v) {
    e[u][v] = e[v][u] = true;
  } ;
  rep(i, 1, n) rep(j, i + 1, n) {
    if (a[i][0] + d <= a[j].back()) adde(i, j);
    else if (a[j][0] + d <= a[i].back()) adde(i, j);
  }
  rep(i, 1, n) rep(j, 1, n) e0[i][j] = e[i][j];
  rep(i, 1, n) if (!p[i]) blossom(i);
  ans0 = ans;
  rep(i, 1, n) p0[i] = p[i];
  // pv(ans);
  rep(i, 1, n) {
    int x = i, y = n + 1;
    for (auto v : a[i]) {
      // cout << "--- i, v = " << i << ' ' << v << endl;
      int cx = 0, cy = 0, px = -1, py = -1;
      rep(j, 1, n) if (j != i) {
        e[j][x] = e[x][j] = a[j][0] + d <= v;
        if (e[j][x]) ++ cx, px = j;
        e[j][y] = e[y][j] = v + d <= a[j].back();
        if (e[j][y]) ++ cy, py = j;
      }
      // pa(e[x], 1, n);
      // pa(e[y], 1, n);
      // pa(p, 1, n + 1);
      // pv(ans);
      if (!cx || !cy || (cx == 1 && cy == 1 && px == py)) continue;
      // cout << "!!!\n";
      auto work = [&](int u) {
        if (!p[u]) blossom(u);
        else if (!e[u][p[u]]) {
          int z = p[u];
          p[u] = p[z] = 0, -- ans;
          blossom(u);
          if (!p[z]) blossom(z);
        }
        // pa(p, 1, n + 1);
        // pv(ans);
      } ;
      work(x), work(y);
      if (ans > (n - k) / 2) return true;
    }
    ans = ans0;
    rep(j, 1, n) p[i] = p0[i], e[i][j] = e[j][i] = e0[i][j];
  }
  return false;
}

signed main() {
  n = read(), k = read();
  if (n - k & 1) return printf("Impossible\n"), 0;
  for (int i = 1, t; i <= n; ++ i) {
    a[i].resize(t = read());
    rep(j, 0, t - 1) a[i][j] = read();
    sort(a[i].begin(), a[i].end());
  }
  int l = 0, r = 1e18;
  while (l < r) {
    int mid = (l + r) >> 1;
    if (check(mid + 1)) l = mid + 1;
    else r = mid;
  }
  printf("%lld\n", l);
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 3
Accepted

Test #1:

score: 3
Accepted
time: 2ms
memory: 3624kb

input:

13 1
1 13
1 2
1 9
1 11
1 8
1 5
1 6
1 4
1 10
1 7
1 12
1 1
1 3

output:

6

result:

ok single line: '6'

Test #2:

score: 0
Accepted
time: 5ms
memory: 3628kb

input:

101 1
1 71
1 95
1 1
1 4
1 85
1 11
1 94
1 29
1 99
1 41
1 59
1 51
1 79
1 67
1 13
1 84
1 16
1 43
1 55
1 18
1 92
1 10
1 77
1 86
1 49
1 20
1 8
1 32
1 72
1 40
1 52
1 76
1 39
1 61
1 82
1 66
1 44
1 3
1 35
1 37
1 48
1 15
1 96
1 33
1 83
1 2
1 30
1 75
1 54
1 70
1 22
1 63
1 60
1 88
1 97
1 34
1 9
1 17
1 57
1 80
...

output:

50

result:

ok single line: '50'

Test #3:

score: 0
Accepted
time: 44ms
memory: 3920kb

input:

291 1
1 1
1 243
1 31
1 188
1 77
1 101
1 20
1 177
1 58
1 12
1 201
1 152
1 89
1 205
1 203
1 214
1 225
1 94
1 147
1 100
1 235
1 103
1 196
1 216
1 192
1 143
1 6
1 259
1 215
1 51
1 234
1 2
1 102
1 17
1 157
1 82
1 52
1 211
1 176
1 264
1 149
1 74
1 105
1 202
1 172
1 226
1 165
1 271
1 78
1 285
1 262
1 88
1 ...

output:

145

result:

ok single line: '145'

Subtask #2:

score: 8
Accepted

Test #4:

score: 8
Accepted
time: 3ms
memory: 3524kb

input:

14 2
2 844974872 196961856
2 282529753 793092789
1 450615292
2 894675938 183278191
2 134804124 988858141
1 440476238
2 892091463 453193625
2 918614039 267044448
1 91126449
2 699070127 177282394
2 365458732 596469725
2 789994620 379428523
2 758349986 369167103
2 227448762 297426831

output:

392388416

result:

ok single line: '392388416'

Test #5:

score: 0
Accepted
time: 1ms
memory: 3620kb

input:

15 3
2 638683108 412097665
2 83585363 50407490
2 843046135 358173578
1 663325200
2 608604244 118346780
2 802365081 329993762
2 507345539 849824533
2 130234046 104894823
2 203433503 491790497
2 257479357 356611715
2 393337689 968844221
2 637493087 938737497
2 165665517 338554501
2 32482910 142430578
...

output:

461498682

result:

ok single line: '461498682'

Test #6:

score: 0
Accepted
time: 2ms
memory: 3532kb

input:

15 7
2 4067 4163
2 3780 4073
2 4060 4132
2 4115 4095
2 3801 4137
2 3767 4097
1 3976
1 4074
2 4141 4153
2 3965 4092
2 4080 3902
2 3863 4136
2 4153 4057
2 4045 3789
2 4117 4093

output:

198

result:

ok single line: '198'

Test #7:

score: 0
Accepted
time: 2ms
memory: 3528kb

input:

15 1
1 873331282220671423
2 735219904810912770 161751845932907141
2 25004270082210777 318839217154000771
2 674996277812508140 449008857311902192
2 472769470430097478 397080345283004274
2 47924412360460752 498222902664554012
2 564253525446680521 853694259885512872
2 656010667051096953 815344423905298...

output:

458440019518723706

result:

ok single line: '458440019518723706'

Test #8:

score: 0
Accepted
time: 2ms
memory: 3556kb

input:

15 13
2 896348312198404671 869762298
2 131322200859472553 156263978028639571
2 519956577 38
1 160595875
2 945987587 50986789140245249
2 41 241229344708873674
2 608655655392127091 41
1 40
2 806584170 50835315064131334
2 3623574246181054 976074155891825784
2 58183525 937860538
2 998266378 826367056
2 ...

output:

430005287589733910

result:

ok single line: '430005287589733910'

Subtask #3:

score: 5
Accepted

Dependency #1:

100%
Accepted

Test #9:

score: 5
Accepted
time: 78ms
memory: 3964kb

input:

287 1
1 173840701363378004
1 743361258032855446
1 746614854489854642
1 56541606566914354
1 420238720727662982
1 851742472173310082
1 663095483358412253
1 909940213272622771
1 793226013158281220
1 545752184531876147
1 428168322861170312
1 445062401949703086
1 781910693870313013
1 656624250154096657
1...

output:

449906768878285431

result:

ok single line: '449906768878285431'

Test #10:

score: 0
Accepted
time: 131ms
memory: 3976kb

input:

291 1
1 200467876183364735
1 226128802768594222
1 30992945592387546
1 131773707522781490
1 237517614711585543
1 767178437925265104
1 476367111669121061
1 569219147773036356
1 307153686500641679
1 256093763487190540
1 489553827811869668
1 665158752209826021
1 821778345278263808
1 591434397265270731
1...

output:

413750515661326196

result:

ok single line: '413750515661326196'

Test #11:

score: 0
Accepted
time: 69ms
memory: 3864kb

input:

299 1
1 196564096074155356
1 215761209458809063
1 229199188828066663
1 207442460325459123
1 147931408833032623
1 165208810879220961
1 156890061745871023
1 281031394966631680
1 190804962058759240
1 165848714658709418
1 274632357171747109
1 178006886468990102
1 183126116704897759
1 263753992920443339
...

output:

95345663143780088

result:

ok single line: '95345663143780088'

Test #12:

score: 0
Accepted
time: 78ms
memory: 3792kb

input:

291 1
1 33421439583378802
1 58525406002796904
1 59037731848091151
1 71845877980447328
1 54939125085737173
1 56305327339855169
1 59720832975150147
1 42814080080439994
1 38886248599850767
1 34446091273967295
1 80213866786920026
1 80384642068684774
1 58866956566326401
1 74919833052212806
1 674057206545...

output:

24762415855888600

result:

ok single line: '24762415855888600'

Test #13:

score: 0
Accepted
time: 80ms
memory: 3864kb

input:

299 1
1 65691845888395612
1 216175196973785149
1 60434785588469342
1 137319292474891070
1 61749050663450912
1 160976063824559296
1 86720087088100703
1 218803727123748287
1 169518786811939488
1 153747605912160670
1 165575991586994780
1 141919220237326556
1 35463749163819549
1 188575630399172220
1 145...

output:

97912748086126811

result:

ok single line: '97912748086126811'

Subtask #4:

score: 0
Memory Limit Exceeded

Dependency #3:

100%
Accepted

Test #14:

score: 0
Memory Limit Exceeded

input:

298 12
1 645886088791049540
1 426745180837601651
1 979147412433797722
1 922061238106952073
1 274440630526214995
1 424124977235014990
1 204894438049963221
1 764943184717907334
1 779533900124364741
1 454823872376348471
1 487382439634807111
1 591648739045233572
1 53460960257864384
1 392937311085787220
...

output:


result:


Subtask #5:

score: 0
Time Limit Exceeded

Dependency #2:

100%
Accepted

Test #22:

score: 15
Accepted
time: 11ms
memory: 3644kb

input:

97 3
2 355271459380040532 547563913925852132
2 501938321780836726 747940481178452472
2 397422061492707294 74967044201975790
2 377923940791121468 378164526846394284
2 264704309452054653 529171612856996754
2 316250711337645385 284323194941392101
2 358629778571158126 368864454575116270
2 38360271038026...

output:

372997432997019308

result:

ok single line: '372997432997019308'

Test #23:

score: 0
Accepted
time: 5ms
memory: 3740kb

input:

95 3
2 594630321920106655 540002493103501660
2 125138319916363529 212072562657897457
2 373817802718383543 13665937791620288
2 315045821144016344 338252361890399510
2 483343425646600556 466582885679461518
2 278197329086017453 428516032353992829
1 59661599996472250
1 254583199582888328
2 4365367002001...

output:

340047122337218325

result:

ok single line: '340047122337218325'

Test #24:

score: 0
Accepted
time: 9ms
memory: 3640kb

input:

97 7
1 24243537937597964
2 582465432759982368 381373957332513395
2 391506769288663264 391876487817869396
2 299551892852869811 107731633859975720
2 156125257586893617 386175789126201813
2 213724291907872015 7697465108273724
2 393633870223728807 256416638715125266
2 290510273528299134 2903854981034601...

output:

333882379519018440

result:

ok single line: '333882379519018440'

Test #25:

score: 0
Accepted
time: 7ms
memory: 3552kb

input:

95 23
1 344791905917209572
2 500083441805144564 509549936981982064
2 329347121414961283 362188436612461360
2 104614943880747675 52960311801613673
2 617606793494520742 33376598049670497
2 342392895594188447 343263248105091839
2 322740972473445196 399001118836944088
2 263495523699786974 33004821266770...

output:

342055752596049500

result:

ok single line: '342055752596049500'

Test #26:

score: 0
Accepted
time: 5ms
memory: 3520kb

input:

99 55
2 89904938987641376 194722167738160343
2 365265714020104046 364275631130776282
2 357172107220911532 357175936070256675
2 366602422140587285 355364788434700731
2 361062739069662108 366182699259043884
2 337340987023855575 362758639984591817
2 356267270889109816 368009872611506605
2 3024813222427...

output:

364338868647435728

result:

ok single line: '364338868647435728'

Test #27:

score: -15
Time Limit Exceeded

input:

97 1
2 91117126161960832 152612010977891961
2 92648119158704985 151081017996819264
2 89586133179453808 154143003954271449
2 158480817402063313 85248319729017232
2 98516925587766625 145212211563875680
2 143681218561699334 100047918559918464
2 91372291675484725 152356845482241792
2 42496577125387271 1...

output:


result:


Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

0%