QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#573648#9315. Rainbow Bracket SequenceniolleCompile Error//C++202.7kb2024-09-18 19:32:152024-09-18 19:32:15

Judging History

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

  • [2024-09-18 19:32:15]
  • 评测
  • [2024-09-18 19:32:15]
  • 提交

answer

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dwn(i,a,b) for(int i=a;i>=b;i--)
#define lowbit(x) (x&(-x))
#define MAXN 305
#define MAXM 2040
#define inf 99999999
#define mp(x,y) make_pair(x,y)
using namespace std;
typedef long long ll;
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch>'9' || ch<'0'){if(ch=='-') f=-1; ch=getchar();}
	while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	return x*f;
}
int cnt[MAXN],t[MAXN],n,S,T,c[MAXN],m,v[MAXN];
int fir[MAXN],to[MAXM],nxt[MAXM],val[MAXM],tot,cost[MAXM];
int pre[MAXN],lst[MAXN],dis[MAXN],flow[MAXN],num,vis[MAXN];
ll sum;
void clr(){
	memset(fir,-1,sizeof(fir));
	tot = -1;
	sum = 0; S = 0;
}
void ade(int x,int y,int z,int w){
//	cout<<"ADE:"<<x<<" "<<y<<" "<<z<<" "<<w<<endl;
	to[++tot] = y;
	nxt[tot] = fir[x];
	fir[x] = tot;
	val[tot] = z;
	cost[tot] = w;
}
queue<int> Q;
bool spfa(){
	rep(i,S,T) pre[i] = -1, dis[i] = inf,lst[i] = -1, vis[i] = 0;
	if(TT > 2) cout<<"QAQ:"<<S<<" "<<T<<" "<<n<<" "<<m<<" "<<num<<endl;
//	memset(pre,-1,sizeof(pre));
//	memset(dis,127,sizeof(dis));
//	memset(lst,-1,sizeof(lst));
//	memset(vis,0,sizeof(vis));
	while(!Q.empty()) Q.pop();
	flow[S] = inf; dis[S] = 0;
	Q.push(S);
	while(!Q.empty()){
		int x = Q.front(); Q.pop();
//		cout<<"NOW:"<<x<<endl;
		vis[x] = 0;
		for(int k=fir[x];k!=-1;k=nxt[k]){
			if(dis[to[k]] > dis[x] + cost[k] && val[k]){
				if(!flow[x]) continue; 
				flow[to[k]] = min(flow[x], val[k]);
				dis[to[k]] = dis[x] + cost[k];
				pre[to[k]] = x;
				lst[to[k]] = k;
				if(!vis[to[k]]) vis[to[k]] = 1, Q.push(to[k]);
			}
		}
	}
	if(pre[T] == -1) return 0;
	return 1;
}
ll FYL(){
	ll ansflow = 0, ansval = 0;
	int x;
	while(spfa()){
//		cout<<"OK\n";
		ansflow += flow[T];
		ansval += 1ll * flow[T] * dis[T];
		x = T;
		while(x != S){
			val[lst[x]] -= flow[T];
			val[lst[x]^1] += flow[T];
//			cout<<x<<"<--"<<pre[x]<<" "<<flow[T]<<endl;
			x = pre[x];
		}
	}
//	cout<<"QAQ:"<<ansflow<<" "<<ansval<<endl;
	if(ansflow != n / 2) return -1;
	return sum - ansval;
}
ll wk(){
	n = read(); m = read(); n *= 2;
	rep(i,1,m) t[i] = read();
	rep(i,1,m) cnt[i] = 0;
	rep(i,1,n) c[i] = read(), cnt[c[i]]++;
	rep(i,1,n) v[i] = read(), sum += 1ll * v[i];
	num = n;
	rep(i,1,m){
		++num;
		if(cnt[i] < t[i]) return -1;
		ade(S,num,cnt[i]-t[i],0); ade(num,S,0,0);
	}
	rep(i,1,n){
		ade(n+c[i],i,1,v[i]); ade(i,n+c[i],0,-v[i]);
	}
	dwn(i,n-1,1){
		ade(i+1,i,inf,0); ade(i,i+1,0,0);
	}
	T = n + m + 1;
	rep(i,1,n) if(!(i&1)) ade(i,T,1,0), ade(T,i,0,0);
	return FYL();
}
int main(){
	freopen("1.in","r",stdin);
	freopen("my.out","w",stdout);
	int TT = read();
	while(TT--){
		clr();
		printf("%lld\n",wk());
	}
	return 0;
}

详细

answer.code: In function ‘bool spfa()’:
answer.code:38:12: error: ‘TT’ was not declared in this scope; did you mean ‘T’?
   38 |         if(TT > 2) cout<<"QAQ:"<<S<<" "<<T<<" "<<n<<" "<<m<<" "<<num<<endl;
      |            ^~
      |            T
answer.code: In function ‘int main()’:
answer.code:106:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  106 |         freopen("1.in","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~
answer.code:107:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  107 |         freopen("my.out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~