求助WAon 8
查看原帖
求助WAon 8
547238
篮网总冠军楼主2025/6/29 16:54
#include <bits/stdc++.h>
using namespace std;

vector<int>a[200005];
int s[200005];
int dp[200005],g[200005],sv[200005],rt[200005];
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int t;
	cin>>t;
	while(t--){
		int n,m;
		cin>>n>>m;
		int po=-2;
		for(int i=1;i<=n;i++){
			int x;
			cin>>x;
			for(int j=1;j<=x;j++){
				int p;
				cin>>p;
				a[i].push_back(p);
			}
		}
		int end=0;
		for(int i=n;i>=1;i--){
			for(int j=0;j<a[i].size();j++){
				if (s[a[i][j]]){
					end=i;
					break;
				}
				s[a[i][j]]=1;
			}
			if (end) break;
		}
		for(int i=1;i<=n;i++){
			for(int j=0;j<a[i].size();j++){
				s[a[i][j]]=0;
			}
		}
		int r=0,l=0;
		g[0]=0;
		for(int i=1;i<=n;i++){
			g[i]=r;
			if (a[i].size()==0) dp[i]=1,r=i,po=i;
			else{
				for(int j=0;j<a[i].size();j++){
					int p=s[a[i][j]];
					if ((p!=0&&g[p]+1>=l)||po+1>=l){
						dp[i]=1;
						r=i;
					}
				}
				for(int j=0;j<a[i].size();j++){
					s[a[i][j]]=i;
				}
			}
			for(int j=0;j<a[i].size();j++){
				while(sv[a[i][j]]){
					for(int z=0;z<a[l].size();z++){
						sv[a[l][z]]--;
					}
					l++;
				}
				sv[a[i][j]]++;
			}
		}
		int ans=0;
		dp[0]=1;
		for(int i=end;i<=n;i++){
			if (dp[i]){
				for(int j=i+1;j<=n;j++){
					if (a[j].size()==0) ans=m;
				}
				if (ans!=m){
					for(int j=i+1;j<=n;j++){
						ans+=a[j].size(); 
					}
				}
				break;
			}
		}
		cout<<ans<<endl;
		for(int i=1;i<=n;i++){
			for(int j=0;j<a[i].size();j++){
				rt[a[i][j]]=sv[a[i][j]]=s[a[i][j]]=0;
			} 
		}
		for(int i=1;i<=n;i++) a[i].clear(),dp[i]=g[i]=0;
	}
	return 0;
}
2025/6/29 16:54
加载中...