比赛 20241128 评测结果 TTTEEEWWTTTTEEEEEEEE
题目名称 魔法卡片 最终得分 0
用户昵称 黄天宇 运行时间 16.298 s
代码语言 C++ 内存使用 5.24 MiB
提交时间 2024-11-28 09:47:45
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e3+5;
int n,m,q;
int num[MAXN];
bool flag[MAXN];
int vis[MAXN];
int cnt[MAXN];
int a[MAXN][MAXN];
int b[MAXN][MAXN];
int maxx;
void dfs(int now,int r,int sum){
	if(now==r+1){
		maxx=max(maxx,sum);
		return;
	}
	for(int i=0;i<=1;i++){
		if(i==0){
			int x=0;
			for(int j=1;j<=num[now];j++){
				if(!vis[a[now][j]]){
					x+=a[now][j]*a[now][j];
				}
				vis[a[now][j]]++;
			} 
			dfs(now+1,r,sum+x);
			for(int j=1;j<=num[now];j++){
				vis[a[now][j]]--;
			} 
		}
		if(i==1){
			int x=0;
			for(int j=1;j<=cnt[now];j++){
				if(!vis[b[now][j]]){
					x+=b[now][j]*b[now][j];
				}
				vis[b[now][j]]++;
			} 
			dfs(now+1,r,sum+x);
			for(int j=1;j<=cnt[now];j++){
				vis[b[now][j]]--;
			} 
		}
	}
}
int main(){
	freopen("magic.in","r",stdin);
	freopen("magic.out","w",stdout);
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		cin>>num[i];
		for(int j=1;j<=num[i];j++){
			cin>>a[i][j];
			flag[a[i][j]]=1;
		}
		for(int j=1;j<=m;j++){
			if(!flag[j]){
				b[i][++cnt[i]]=j;
			}
		}
	}
	for(int i=1;i<=q;i++){
		int l,r;
		cin>>l>>r;
		dfs(l,r,0);
		memset(vis,0,sizeof(vis));
		cout<<maxx<<endl;
	}
	return 0;
}