QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#578751 | #9315. Rainbow Bracket Sequence | k1rito | WA | 0ms | 13888kb | C++14 | 2.4kb | 2024-09-20 21:08:03 | 2024-09-20 21:08:07 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define in inline
#define int long long
const int N=111000;
const int M=111000;
const int inf=9876543231234;
int q[N],n,m,s,t,tot=1,pre[N],vis[N],incf[N],maxflow,mincost,first[N],nxt[M],to[M],w[M],dis[N],now[N],val[M];
int T,num[N],li[N],col[N];
in void add(int a,int b,int c,int d)
{
nxt[++tot]=first[a];
first[a]=tot;
to[tot]=b;
w[tot]=c;
val[tot]=d;
}
in bool spfa()
{
for(int i=s;i<=t;i++) dis[i]=inf,vis[i]=0;
dis[t]=inf;vis[t]=0;
int l=1,r=0;
q[++r]=s;
dis[s]=0;vis[s]=1;
incf[s]=inf;
while(l<=r)
{
int u=q[l++];
vis[u]=0;
for(int i=first[u];i;i=nxt[i])
{
int v=to[i];
if(!w[i]) continue;
if(dis[v]>dis[u]+val[i])
{
dis[v]=dis[u]+val[i];
incf[v]=min(incf[u],w[i]);
pre[v]=i;
if(!vis[v])
{
vis[v]=1;
q[++r]=v;
}
}
}
}
if(dis[t]==inf) return false;
return true;
}
void MCMF()
{
while(spfa())
{
int u=t;
maxflow+=incf[t];
mincost+=dis[t]*incf[t];
while(u!=s)
{
int i=pre[u];
w[i]-=incf[t];
w[i^1]+=incf[t];
u=to[i^1];
}
}
}
void init()
{
tot=1;
for(int i=s;i<=t;i++)
{
first[i]=num[i]=incf[i]=0;
}
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>T;
while(T--)
{
int sum=0,flag=0;
cin>>n>>m;
s=0,t=2*n+m+1;
init();
for(int i=1;i<=m;i++) cin>>li[i];
for(int i=1;i<=2*n;i++)
{
cin>>col[i];
num[col[i]]++;
}
for(int i=1;i<=2*n;i++)
{
int v;
cin>>v;
sum+=v;
add(2*n+col[i],i,1,v);
add(i,2*n+col[i],0,-v);
}
for(int i=1;i<=m;i++)
{
if(num[i]<li[i])
{
flag=1;
break;
}
add(s,2*n+i,num[i]-li[i],0);
add(2*n+i,s,0,0);
}
if(flag)
{
cout<<-1<<'\n';
continue;
}
for(int i=1;i<=2*n;i++)
{
if(i==2*n)
{
add(i,t,i/2,0);
add(t,i,0,0);
}
add(i,i+1,i/2,0);
add(i+1,i,0,0);
}
MCMF();
if(maxflow!=n) cout<<-1<<"\n";
else cout<<sum-mincost<<"\n";
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 13884kb
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: 0ms
memory: 13888kb
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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
result:
wrong answer 2nd numbers differ - expected: '343766215', found: '-1'