0pts求条,玄关
查看原帖
0pts求条,玄关
777848
superkkkeee楼主2025/8/5 17:06

样例过了,全Wa,玄关

#include<bits/stdc++.h>
using namespace std;
#define int long long
int T;
int n,m;
int col[100001];
int ksm[100001];
int dfn[100001];
int low[100001];
int a[100001];
vector<int>p[100001];
int cntb[100001];
int cutb[100001];
int sumb[100001];
int cut[100001];
bool flag[100001];
int isflag[100001];
int ind[100001];
int cntbmap[100001];
string s;
int C,SCC;
const int mod=1e9+7;
void tarjan(int x,int fa)
{
	col[x]=SCC;
	if(a[x]==1)cutb[x]=cntb[x]=1;
	dfn[x]=low[x]=++C;
	for(int xx:p[x])
	{
		if(!dfn[xx])
		{
			tarjan(xx,x),low[x]=min(low[x],low[xx]);
			cntb[x]+=cntb[xx];
			if(low[xx]>=dfn[x])
			{
				cutb[x]+=cntb[xx];
				++cut[x];
				if(flag[x]||(cntb[xx]%2!=0))flag[x]=1;
			}
		}
		else if(xx!=fa)low[x]=min(low[x],dfn[xx]);
	}
	if(!fa) --cut[x];
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	ksm[0]=1;for(int i=1;i<=100000;i++)ksm[i]=ksm[i-1]*2;
	cin>>T;
	while(T--)
	{
		cin>>n>>m;
		C=0,SCC=0;	
		memset(dfn,0,sizeof(dfn));
		memset(cut,0,sizeof(cut));
		memset(ind,0,sizeof(ind));
		memset(flag,0,sizeof(flag));
		for(int i=0;i<m;++i)
		{
			int u,v; cin>>u>>v;
			ind[u]++; ind[v]++;
			p[u].push_back(v);
			p[v].push_back(u);
		}
		cin>>s;
		for(int i=1;i<=n;++i)a[i]=s[i-1]-'0';
		int f=0;
		for(int i=1;i<=n;++i)
			if(dfn[i]==0)
			{
				++SCC,tarjan(i,0),f+=(cntb[i]&1);
				cntbmap[SCC]=cntb[i];
				isflag[SCC]=(cntbmap[SCC]&1);
			}
		int ans=m-n+SCC;
		if(!f) cout<<ksm[ans];
		else cout<<"0";
		cout<<" ";
		for(int i=1;i<=n;++i)
		{
			if(!ind[i])
			{
				if(f-cntb[i]==0) cout<<ksm[ans];
				else cout<<"0";
				cout<<" ";
			}
			else if(cut[i]==0)
			{
				if(isflag[col[i]]&&f-a[i]==0) cout<<ksm[ans-ind[i]+1+cut[i]];
				else if(!isflag[col[i]]&&!f&&a[i]!=1) cout<<ksm[ans-ind[i]+1+cut[i]];
				else cout<<"0";
				cout<<" ";
			}
			else
			{
				bool Nflag=(!flag[i]&&(cntbmap[col[i]]-cutb[i])%2==0);
				if(Nflag&&f-isflag[col[i]]==0) cout<<ksm[ans-ind[i]+1+cut[i]];
				else cout<<"0";
				cout<<" ";
			}
		}
		cout<<'\n';
	}
	return 0;
}

2025/8/5 17:06
加载中...