mxqz hack
查看原帖
mxqz hack
691749
Simclover楼主2023/2/27 13:55

rt,做的是 m=1m=1 的部分分。

#include<bits/stdc++.h>

using namespace std;

int ans[10010];
int n,m,t;
int x;
int cnt,cnt1;
bool vis[100010];
bool fg;

queue<int>q,q1;

signed main(){
	scanf("%d",&t);
	while(t--){
		memset(ans,0,sizeof(ans));
		memset(vis,0,sizeof(vis));
		cnt=0;
		fg=0;
		
		scanf("%d%d",&n,&m);
		
		for(int i=1;i<=m;i++){
			scanf("%d",&x);
			for(int j=1;j<=x;j++){
				int y;
				scanf("%d",&y);
				q.push(y);
				vis[y]=1;
			}
		}
		
		for(int i=1;i<=n;i++){
			if(!vis[i]) q1.push(i);
		}
		if(q1.empty()){
			puts("-1");
			continue;
		}
		for(int i=1;i<=n;i++){
			//puts("qwq");
			
			if(cnt==2){
				//puts("qwq");
				if(q1.empty()){
					fg=1;
					break;
				}
				ans[++cnt1]=q1.front();
				q1.pop();
				cnt=0;
			}
			else{
				if(!q.empty()) ans[++cnt1]=q.front(),q.pop();
				else break;
				cnt++;
			}
		}
		
		while(!q1.empty()){
			ans[++cnt1]=q1.front();
			q1.pop();
		}
		if(fg){
			puts("-1");
			continue;
		}
		for(int i=1;i<=n;i++){
			if(i==1){
				if(vis[ans[i]]&&vis[ans[i+1]]&&vis[ans[n]]){
					fg=1;
					//puts("qwq");
				}
			}
			else if(i==n){
				if(vis[ans[i]]&&vis[ans[1]]&&vis[ans[i-1]]){
					fg=1;
					//puts("qwq1");
				}
			}
			else{
				if(vis[ans[i]]&&vis[ans[i+1]]&&vis[ans[i-1]]){
					fg=1;
					//puts("q")
				}
			}
		}
		if(fg){
			puts("-1");
			continue;
		}
		for(int i=1;i<=n;i++){
			printf("%d ",ans[i]);
		}
		puts("");
	}
	return 0;
}
/*
1
10 1
5 1 2 3 4 5
*/
2023/2/27 13:55
加载中...