昨天比赛t4只WA了最后一个点,75求调
查看原帖
昨天比赛t4只WA了最后一个点,75求调
678070
ykzzldz楼主2024/9/8 11:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &a){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||'9'<ch){
		if(ch=='-')w=-1;
		ch=getchar(); 
	}
	while('0'<=ch&&ch<='9'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	a=s*w;
}
const int N=2e5+10;
int n,m,dfn[N],low[N],cnt,in[N],T,num,siz[N],id[N],d[N],ok[N],nn,pd[N],jsq;
bool vis[N],vvis[N];
struct node{
	int v,id;
};
vector<node>a[N];
void dfs(int u){
	for(int i=0;i<a[u].size();i++){
		int v=a[u][i].v;
		if(!vvis[v]){
			vvis[v]=1;
			jsq++;
			dfs(v);
		}
	}
}
vector<int>b[N],jl[N];
stack<int>s;
void tarjan(int x,int fa){
	dfn[x]=low[x]=++cnt;
	s.push(x);
	in[x]=1;
	for(int i=0;i<b[x].size();i++){
		int v=b[x][i];
		if(v==fa)continue;
		if(!dfn[v]){
			tarjan(v,x);
			low[x]=min(low[x],low[v]);
		}
		else if(in[v]){
			low[x]=min(low[x],dfn[v]);
		}
	}
	if(low[x]==dfn[x]){
		int k=0;
		num++;
		while(x!=k){
			k=s.top();
			s.pop();
			in[k]=0;
			id[k]=num;
			siz[num]++;
		}
	}
}
signed main(){
	cin>>T;
	while(T--){
		cnt=num=0;
		read(n),read(m);
		nn=n;
		for(int i=1;i<=n;i++){
			a[i].clear();
			b[i].clear();
			jl[i].clear();
			jl[i].push_back(i);
			dfn[i]=low[i]=siz[i]=in[i]=id[i]=d[i]=ok[i]=pd[i]=0;
		}
		for(int i=1;i<=m;i++){
			vis[i]=0;
			int u,v;
			read(u),read(v);
			a[u].push_back({v,i});
			a[v].push_back({u,i});
			d[u]++,d[v]++;
		}
		queue<int>q;
		for(int i=1;i<=n;i++){
			if(d[i]==1){
				q.push(i);
			}
		}
		while(!q.empty()){
			int i=q.front();
			q.pop();
			ok[i]=1;
			nn--;
			for(int j=0;j<a[i].size();j++){
				if(vis[a[i][j].id])continue;
				int v=a[i][j].v;
				d[v]--;
				if(d[v]==1)q.push(v);
				for(int k=0;k<jl[i].size();k++){
					jl[v].push_back(jl[i][k]);
				}
				vis[a[i][j].id]=1;
			}
		}
		for(int i=1;i<=n;i++){
			vvis[i]=0;
			for(int j=0;j<a[i].size();j++){
				int v=a[i][j].v,id=a[i][j].id;
				if(vis[id])continue;
				b[i].push_back(v);
			}
		}
		jsq=0;
		dfs(1);
		if(jsq!=n){
			cout<<"-1\n";
			continue;
		};
		for(int i=1;i<=n;i++){
			if(!ok[i]){
				tarjan(i,0);
				break;
			}
		}
		if(cnt!=nn||m==n-1){
			cout<<"-1\n";
			continue;
		}
		int f=0;
		for(int i=1;i<=n;i++){
			if(ok[i]||siz[id[i]]==1)continue;
			int ff=1;
			for(int j=0;j<b[i].size();j++){
				int v=b[i][j];
				if(siz[id[v]]==1){
					ff=0;
					break;
				}
			}
			if(!ff)continue;
			for(int j=0;j<jl[i].size();j++){
				pd[jl[i][j]]=1;
			}
			f=1;
			for(int j=1;j<=n;j++){
				if(pd[j])cout<<'B';
				else cout<<'W';
			}
			cout<<'\n';
			break;
		}
		if(!f)cout<<"-1\n";
	}
	return 0;
}
2024/9/8 11:53
加载中...