QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#86035 | #5369. 时间旅行 | tricyzhkx | 11 | 132ms | 3888kb | C++14 | 2.5kb | 2023-03-09 08:31:37 | 2023-03-09 08:31:41 |
Judging History
answer
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,k,le,ri,curt,tim[310],fa[310],que[310],pre[310],mch[310],tmch[310],col[310];
ll mn[310],mx[310];
bool G[310][310];
vector<ll> a[310];
int getF(int x){return fa[x]==x?x:fa[x]=getF(fa[x]);}
int lca(int u,int v)
{
for(curt++;u;swap(u,v))
if(tim[u=getF(u)]==curt) return u;
else tim[u]=curt,u=pre[mch[u]];
return 0;
}
void blossom(int u,int v,int w)
{
for(;getF(u)!=w;u=pre[v])
{
pre[u]=v;v=mch[u];
fa[u]=fa[v]=w;
if(col[v]<0) col[v]=1,que[ri++]=v;
}
}
bool bfs(int s)
{
memset(col+1,0,sizeof(int)*(n+1));
iota(fa+1,fa+n+2,1);
le=ri=0;que[ri++]=s;col[s]=1;
while(le<ri)
{
int u=que[le++],w;
for(int v=1;v<=n+1;v++)if(G[u][v])
{
if(col[v]<0) continue;
if(col[v]>0) w=lca(u,v),blossom(u,v,w),blossom(v,u,w);
else
{
pre[v]=u;col[v]=-1;
if(mch[v]) col[mch[v]]=1,que[ri++]=mch[v];
else
{
for(;v;v=w) u=pre[v],w=mch[u],mch[u]=v,mch[v]=u;
return true;
}
}
}
}
return false;
}
bool judge(ll lim)
{
int ans=0,tans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)if(i!=j)
G[i][j]=(mx[i]-mn[j]>=lim || mx[j]-mn[i]>=lim);
for(int i=1;i<=n;i++) G[i][n+1]=G[n+1][i]=0;
memset(mch+1,0,sizeof(int)*(n+1));
for(int i=1;i<=n;i++)
if(!mch[i]) ans+=bfs(i);
for(int i=1;i<=n;i++)for(ll v:a[i])
{
int d1=0,d2=0,v1=0,v2=0;
for(int j=1;j<=n;j++)if(i!=j)
{
G[i][j]=G[j][i]=(mn[j]<=v-lim);
G[n+1][j]=G[j][n+1]=(mx[j]>=v+lim);
if(G[i][j]) d1++,v1=j;
if(G[n+1][j]) d2++,v2=j;
}
if(d1 && d2 && (d1>1 || d2>1 || v1!=v2))
{
tans=ans;memcpy(tmch+1,mch+1,sizeof(int)*(n+1));
if(mch[i] && !G[i][mch[i]])
{
int j=mch[i];mch[i]=mch[j]=0;ans--;
if(!mch[i]) ans+=bfs(i);
if(!mch[j]) ans+=bfs(j);
}
else if(!mch[i]) ans+=bfs(i);
if(!mch[n+1]) ans+=bfs(n+1);
if(ans>=k) return true;
ans=tans;memcpy(mch+1,tmch+1,sizeof(int)*(n+1));
}
for(int j=1;j<=n;j++)if(i!=j)
G[i][j]=G[j][i]=(mx[i]-mn[j]>=lim || mx[j]-mn[i]>=lim),
G[n+1][j]=G[j][n+1]=0;
}
return false;
}
int main()
{
cin>>n>>k;
if((n-k)&1) return puts("Impossible"),0;
k=(n-k+2)/2;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);a[i].resize(x);
for(ll &j:a[i]) scanf("%lld",&j);
sort(a[i].begin(),a[i].end());
mn[i]=a[i][0];mx[i]=a[i][x-1];
}
ll l=0,r=1e18,mid;
while(l<r)
{
mid=(l+r+1)/2;
if(judge(mid)) l=mid;
else r=mid-1;
}
cout<<l<<endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 3
Accepted
Test #1:
score: 3
Accepted
time: 1ms
memory: 3560kb
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: 6ms
memory: 3532kb
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: 50ms
memory: 3888kb
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: 2ms
memory: 3796kb
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: 2ms
memory: 3588kb
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: 3588kb
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: 0ms
memory: 3804kb
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: 3588kb
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: 0
Time Limit Exceeded
Dependency #1:
100%
Accepted
Test #9:
score: 5
Accepted
time: 76ms
memory: 3800kb
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: 132ms
memory: 3888kb
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: -5
Time Limit Exceeded
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:
result:
Subtask #4:
score: 0
Skipped
Dependency #3:
0%
Subtask #5:
score: 0
Time Limit Exceeded
Dependency #2:
100%
Accepted
Test #22:
score: 0
Time Limit Exceeded
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:
result:
Subtask #6:
score: 0
Skipped
Dependency #5:
0%
Subtask #7:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
100%
Accepted
Dependency #3:
0%