QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#565641 | #9315. Rainbow Bracket Sequence | Hitassman | WA | 2ms | 14116kb | C++14 | 2.6kb | 2024-09-15 21:55:35 | 2024-09-15 21:55:35 |
Judging History
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'