QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#571891 | #9315. Rainbow Bracket Sequence | Asrit | WA | 4ms | 5820kb | C++14 | 2.6kb | 2024-09-18 09:54:32 | 2024-09-18 09:54:34 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define rop(i,a,b) for(int i=(a);i<(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define por(i,a,b) for(int i=(a);i>(b);i--)
#define inn(x) (x<<1)
#define ouu(x) (x<<1|1)
using namespace std;
const int N=5e4+10,inf=1e9;
int TT,n,m,S,T,suml;
int l[N],c[N];
long long v[N];
struct node{
int nx,to,c;
long long w;
}e[N<<1];
int h[N],idx;
void add(int x,int y,int z,int w){
e[idx].nx=h[x],e[idx].to=y,e[idx].c=z,e[idx].w=w,h[x]=idx++;
e[idx].nx=h[y],e[idx].to=x,e[idx].c=0,e[idx].w=-w,h[y]=idx++;
}
int getid(int p,int x){
return p*2*n+x;
}
void init(){
memset(h,-1,sizeof(h));
suml=idx=0;
}
long long dis[N];
int incf[N],vis[N],pre[N];
queue<int> q;
bool SPFA(){
memset(incf,0,sizeof(incf));
memset(dis,0x3f,sizeof(dis));
q.push(S),incf[S]=inf,dis[S]=0;
while(!q.empty()){
int x=q.front();q.pop();
vis[x]=0;
for(int i=h[x];~i;i=e[i].nx){
int y=e[i].to;
if(e[i].c&&dis[y]>dis[x]+e[i].w){
dis[y]=dis[x]+e[i].w;
incf[y]=min(e[i].c,incf[x]);
pre[y]=i;
if(!vis[y]){
vis[y]=1;
q.push(y);
}
}
}
}
return incf[T]>0;
}
long long EK(){
long long cost=0;
while(SPFA()){
long long f=incf[T];
cost+=f*dis[T];
for(int i=T;i!=S;i=e[pre[i]^1].to)
e[pre[i]].c-=f,e[pre[i]^1].c+=f;
}
return cost;
}
int main(){
scanf("%d",&TT);
while(TT--){
S=0,T=N-3;
scanf("%d%d",&n,&m);
init();
rep(i,1,m) scanf("%d",&l[i]),suml+=l[i];
rep(i,1,2*n) scanf("%d",&c[i]);
rep(i,1,2*n) scanf("%lld",&v[i]);
if(suml>n){
puts("-1");
continue;
}
rep(x,1,2*n){
add((n+2)*4*n+c[x],inn(getid(n+1,x)),1,0);
add((n+2)*4*n+m+1,inn(getid(n+1,x)),1,0);
add(inn(getid(n+1,x)),ouu(getid(n+1,x)),1,0);
rep(p,0,n){
if(p>x) break;
if(p>(2*n-x)) break;
if((p&1)^(x&1)) continue;
add(inn(getid(p,x)),ouu(getid(p,x)),1,0);
if(!p) add(ouu(getid(p,x)),T,1,0);
else{
add(ouu(getid(p,x)),ouu(getid(p-1,x+1)),1,0);
add(ouu(getid(n+1,x)),inn(getid(p,x)),1,-v[x]);
}
}
}
rep(i,1,m) add(S,(n+2)*4*n+i,l[i],0);
add(S,(n+2)*4*n+m+1,n-suml,0);
printf("%lld\n",-EK());
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 4688kb
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: 4ms
memory: 5820kb
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:
4906452153 343766215 2351080746 3426965219 2593135825 1230630334 1351561190 2539318868 1013080942 4656646546 1158637046 4449366865 2231197660 2719131728 3983627641 5287385592 1773576034 1046749330 6115214757 3920988203 3669381376 3902088946 4035887375 2566553992 5466071623 5977120748 7505501534 4947...
result:
wrong answer 1st numbers differ - expected: '-1', found: '4906452153'