QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#574254 | #9315. Rainbow Bracket Sequence | Wolam | WA | 1ms | 3908kb | C++17 | 2.1kb | 2024-09-18 21:14:02 | 2024-09-18 21:14:02 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int inf=0x3f3f3f3f3f3f3f3f;
int n,m,s,t;
int l[205];
int c[205],v[205];
int vis[505];
int head[505],tot;
int cur[505],dis[505];
struct ss{
int node,nxt,w,f;
}e[5005];
void add(int u,int v,int w,int f)
{
e[++tot]=(ss){v,head[u],w,f};
head[u]=tot;
e[++tot]=(ss){u,head[v],0,-f};
head[v]=tot;
}
bool spfa()
{
for(int i=s;i<=t;i++)
dis[i]=-inf;
queue<int> q;
q.push(s);dis[s]=0;
while(!q.empty())
{
int x=q.front();q.pop();
vis[x]=0;
//cerr<<x<<" "<<dis[x]<<endl;
for(int i=head[x];i;i=e[i].nxt)
{
if(!e[i].w)continue;
int y=e[i].node;
if(dis[x]+e[i].f>dis[y])
{
dis[y]=dis[x]+e[i].f;
if(!vis[y])
{
vis[y]=1;
q.push(y);
}
}
}
}
return dis[t]!=-inf;
}
int cost;
int dinic(int x,int now)
{
//cerr<<x<<endl;
if(x==t||!now)return now;
int ans=0;
vis[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
cur[x]=i;
if(!e[i].w)continue;
int y=e[i].node;
if(!vis[y]&&dis[y]==dis[x]+e[i].f)
{
int v=dinic(y,min(now-ans,e[i].w));
e[i].w-=v;
e[i^1].w+=v;
ans+=v;
cost+=v*e[i].f;
if(ans==now)break;
}
}
vis[x]=0;
return ans;
}
void sol()
{
cin>>n>>m;
s=0;
t=n*3+m+2;
tot=1;
for(int i=s;i<=t;i++)
head[i]=0;
int lev=n;
int n3=n*3;
for(int i=1;i<=m;i++)
{
cin>>l[i];
add(s,n3+i,l[i],0);
lev-=l[i];
}
for(int i=1;i<=n+n;i++)
{
cin>>c[i];
}
for(int i=1;i<=n+n;i++)
{
cin>>v[i];
add(n3+c[i],i,1,v[i]);
add(n3+m+1,i,1,v[i]);
add(i,t,1,0);
if(i>1)add(n+n+i/2,i,1,0);
}
for(int i=1;i<n;i++)
{
add(n+n+i,n+n+i+1,inf,0);
}
add(s,n+n+1,n,0);
//cerr<<"graph"<<endl;
if(lev<0)
{
cout<<"-1\n";
return;
}
add(s,n3+m+1,lev,0);
cost=0;
int ans=0;
while(spfa())
{
for(int i=s;i<=t;i++)
cur[i]=head[i];
ans+=dinic(s,inf);
}
if(ans!=n+n)cost=-1;
cout<<cost<<'\n';
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--)
sol();
}
/*
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*/
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3908kb
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: 1ms
memory: 3612kb
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:
5220751523 343766215 2351080746 3673330360 2201471991 -1 1351561190 2539318868 1093935906 4946124799 -1 4600692243 2231197660 3107528418 4640037833 5142301623 -1 1194080633 6403585429 4247389899 -1 4230243225 4836311506 2615588023 5751395565 6003410525 7529223112 -1 5054275471 1467678317 883992368 1...
result:
wrong answer 1st numbers differ - expected: '-1', found: '5220751523'