QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#570445#9315. Rainbow Bracket SequencezqxWA 1ms3688kbC++232.4kb2024-09-17 15:52:262024-09-17 15:52:30

Judging History

你现在查看的是最新测评结果

  • [2024-09-17 15:52:30]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3688kb
  • [2024-09-17 15:52:26]
  • 提交

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;
   int sum=n/2;
   for(int i=1;i<=m;i++){
      int x;
      cin>>val[i];
      sum-=val[i];
      //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);
   }
   if(sum<0){
      cout<<"-1\n";
      continue;
   }
   //cout<<sum<<'\n';
   for(int i=1;i<=m;i++){
      add(s,idc[i],val[i]+sum,0);
   }
   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;
   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: 1ms
memory: 3612kb

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: 3688kb

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
2351080746
-1
-1
-1
1352480010
2539318868
1013080942
-1
-1
-1
2231197660
-1
-1
-1
-1
1046749330
6488101105
-1
-1
-1
-1
-1
6469784940
6350958028
-1
-1
-1
1467678317
883992368
1232523916
-1
4916218981
-1
-1
7132499436
-1
-1
-1
-1
-1
-1
3733438203
5471670703
1309966981
610708479
1107682840...

result:

wrong answer 4th numbers differ - expected: '3426965219', found: '-1'