QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#570337 | #9315. Rainbow Bracket Sequence | zqx | WA | 1ms | 3856kb | C++23 | 2.2kb | 2024-09-17 15:22:56 | 2024-09-17 15:22:57 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define endl "\n"
#define all(tar) tar.begin(),tar.end()
#define pii pair<int,int>
#define AC return 0;
#define ll long long
const int N = 10000;
const ll inf =1e15;
struct eg {
int to, rev;
ll val, c;
};
vector<eg>mp[N];
int s, t, vis[N];
ll dis[N], mc = 0;
void add(int x, int y, int v, int c) {
mp[x].push_back({y, (int)mp[y].size(), v, c}), mp[y].push_back({x, (int)mp[x].size() - 1, 0, -c});
}
bool spfa() {
for(int i=1;i<=t;i++){
dis[i]=1e15;
vis[i]=0;
}
queue<int>q;
q.push(s), dis[s] = 0, vis[s] = 1;
while (!q.empty()) {
int x = q.front();
q.pop();
vis[x] = 0;
for (auto&[to, rev, val, c] : mp[x]) {
if (dis[to] <= dis[x] + c || !val)continue;
dis[to] = dis[x] + c;
if (!vis[to])q.push(to), vis[to] = 1;
}
}
return dis[t] != 1e15;
}
ll dfs(int x, ll flow) {
if (x == t || !flow)return flow;
ll ans = 0, d;
vis[x] = 1;
for (int i = 0; i < mp[x].size(); i++) {
auto&[to, rev, val, c] = mp[x][i];
if (!val || vis[to] || dis[to] != dis[x] + c)continue;
d = dfs(to, min(val, flow));
if (!d)dis[to] = inf;
ans += d, val -= d, mp[to][rev].val += d, mc += d * c, flow -= d;
}
vis[x] = 0;
return ans;
}
int idx,id[205][2],idc[105],col[205],val[205];
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
while(T--){
for(int i=1;i<=idx;i++)mp[i].clear();
idx=0;
int n,m;
cin>>n>>m;
n*=2;
s=++idx;
for(int i=1;i<=m;i++)idc[i]=++idx;
for(int i=1;i<=n;i++){
id[i][0]=++idx;
id[i][1]=++idx;
}
int nd=0;
t=++idx;
for(int i=1;i<=m;i++){
int x;
cin>>x;
nd+=x;
add(s,idc[i],x,0);
}
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(i!=n)add(idc[x],id[i][0],1,0);
add(id[i][0],id[i][1],1,0);
add(id[i][1],t,1,1e12);
}
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(i<n){
add(id[i][1],id[i+1][0],1,-x-1e12);
add(id[i][0],id[i+1][0],1e9,0);
}
}
mc=0;
int sum=0;
while(spfa()){
sum+=dfs(s,inf);
}
if(sum!=n/2||mc>0){
cout<<"-1\n";
}
else cout<<-mc<<'\n';
}
AC
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3584kb
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: 3856kb
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 -1 -1 -1 -1 -1 2539318868 1013080942 -1 -1 -1 2231197660 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 6469784940 -1 -1 -1 -1 -1 883992368 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1309966981 -1 -1 -1 1373323696
result:
wrong answer 3rd numbers differ - expected: '2351080746', found: '-1'