QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#565641#9315. Rainbow Bracket SequenceHitassmanWA 2ms14116kbC++142.6kb2024-09-15 21:55:352024-09-15 21:55:35

Judging History

This is the latest submission verdict.

  • [2024-09-15 21:55:35]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 14116kb
  • [2024-09-15 21:55:35]
  • Submitted

answer

#include<bits/stdc++.h>
#define ll long long
using namespace std;
template<typename T>
void read(T &x){
	x=0;
	int fu=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') fu*=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	x*=fu;
	return;
}
int t,st,te,zh,co;
int T,n,m,cnt;
const int N=1e5+40;
int s[N<<2],sl[N<<2];
ll len[N<<2],clen[N<<2];
int d[N<<8],q,q1;
ll dis[N];
int fa[N],fn[N];
bool num[N];
const ll inf=1e18;
const ll nf=1e12;
ll ass;
ll C[N],col[N],val[N];
void add_edge(int j,int k,ll l,ll cl){
	s[++t]=k;
	sl[t]=sl[j];
	sl[j]=t;
	len[t]=l;
	clen[t]=cl;
	return;
}
void add(int j,int k,ll l,ll cl){
	add_edge(j,k,l,cl);
	add_edge(k,j,0,-cl);
}
bool bfs(){
	for(int i=1;i<=cnt;++i) num[i]=0;
	for(int i=1;i<=cnt;++i) dis[i]=inf;
	q=0;q1=0;
	dis[st]=0;
	d[++q]=st;num[st]=1;
	while(q1<q){
		int u=d[++q1];
		num[u]=0;
		for(int i=sl[u];i;i=sl[i]){
			int de=s[i];
			if(!len[i]) continue;
			if(dis[de]>dis[u]+clen[i]){
				dis[de]=dis[u]+clen[i];
				fa[de]=u;fn[de]=i;
				if(!num[de]){
					num[de]=1;
					d[++q]=de;
				}
			}
		}
	}
	if(dis[te]<inf) return 1;
	return 0;
}
void EK(){
	ll ans=0,ans1=0,sum;
	while(bfs()){
		sum=inf;
		for(int i=te;i!=st;i=fa[i]){
			sum=min(sum,len[fn[i]]);
		}
		for(int i=te;i!=st;i=fa[i]){
			len[fn[i]]-=sum;
			len[fn[i]^1]+=sum;
			ans1+=sum*clen[fn[i]];
		}
		ans+=sum;
	}
//	cout<<ass<<endl;
	if(ans != n){
		printf("-1\n");
	}
	else{
		printf("%lld\n",-ans1);
	}
//	cout<<ans<<" "<<ans1<<endl;
	return;
}
int main()
{
	int i,j,k;
	ll l,cl;
	read(T);
	while(T--){
		read(n);read(m);
		t=4*n+m+4;
		cnt=t;
		st=4*n+m+4;
		te=4*n+m+3;
		zh=4*n+m+2;
		co=4*n+m+1;
		if(t%2==0) ++t;
		for(i=1;i<=t;++i) s[i]=i,sl[i]=len[i]=clen[i]=0;
		ass=0;
		for(i=1;i<=m;++i) read(C[i]),ass+=C[i];
		for(i=1;i<=2*n;++i) read(col[i]);
		for(i=1;i<=2*n;++i) read(val[i]);
		add(st,zh,n,0);
		for(i=1;i<=m;++i){
			add(zh,i,C[i],0);
		}
		
		if(n<ass){
			printf("-1\n");
			continue;
		}
		add(zh,co,n-ass,0);
		
		for(i=1;i<=2*n;++i){
			add(col[i],m+i,1,-val[i]);
		}
		for(i=1;i<=2*n;++i){
			add(co,m+i,1,-val[i]);
		}
		for(i=1;i<=2*n;++i){
			for(j=i+1;j<=2*n;++j){
				add(m+i,m+2*n+j,1,0);
			}
		}
		for(i=1;i<=2*n;++i){
			add(m+2*n+i,te,1,0);
		}
		EK();
	}
	return 0;
}
/*
7
3 2
2 1
1 2 2 2 2 2
1 1 1 1 1 1
3 2
0 0
1 2 1 1 2 2
0 0 0 0 0 0
3 2
0 0
1 2 1 1 2 2
0 0 0 0 0 9
3 2
0 0
1 2 1 1 2 2
0 0 0 0 9 0
3 3
1 1 1
1 2 3 1 2 3
2 1 1 1 3 4
3 3
1 1 1
1 2 3 1 2 3
2 2 1 1 3 4
3 3
1 1 1
1 2 3 1 2 3
3 1 1 1 3 4
1 1
1 1

*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 14116kb

input:

2
3 2
1 2
1 2 2 2 1 2
3 1 4 2 2 1
3 2
2 2
1 2 2 2 1 2
3 1 4 2 2 1

output:

9
-1

result:

ok 2 number(s): "9 -1"

Test #2:

score: -100
Wrong Answer
time: 2ms
memory: 14116kb

input:

50
8 6
0 2 2 0 3 1
3 5 1 1 5 3 5 2 3 2 2 1 2 2 4 6
998133227 879226371 59632864 356493387 62611196 827258251 296576565 204244054 812713672 780267148 614679390 447700005 102067050 544546349 116002772 761999375
1 1
1
1 1
343766215 374461155
3 1
2
1 1 1 1 1 1
796323508 303640854 701432076 853325162 610...

output:

-1
343766215
2502973832
3626833461
-1
-1
1352480010
2539318868
1013080942
4965810479
-1
-1
2231197660
3139944544
4455447185
5663248788
-1
1046749330
6745267197
4718206775
-1
4484157486
4553775793
3221957709
5268471900
6350958028
7994840149
-1
5191285454
1467678317
883992368
1660738482
-1
5702459181
...

result:

wrong answer 3rd numbers differ - expected: '2351080746', found: '2502973832'