QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#86035#5369. 时间旅行tricyzhkx11 132ms3888kbC++142.5kb2023-03-09 08:31:372023-03-09 08:31:41

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-09 08:31:41]
  • 评测
  • 测评结果:11
  • 用时:132ms
  • 内存:3888kb
  • [2023-03-09 08:31:37]
  • 提交

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%