求助
查看原帖
求助
800499
suzhikz楼主2025/1/14 21:23

有无人帮忙拍下,玄关

#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
#define int long long
using namespace std;
//void read(int &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
void read(ll &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
const int N=5e5+5,mod=998244353;
ll n,m,siz[N],deep[N],mark[N],sum_mark[N],rt,tmp;
ll book[N];
vector<int>g[N];
ll dp[N];
ll qpow(ll x,int y){
	ll re=1;
	while(y){
		if(y&1)re=re*x%mod;x=x*x%mod;y/=2;
	}return re;
}
void dfs1(int x,int fa){
	deep[x]=deep[fa]+1;
	if(mark[x])sum_mark[x]=1;siz[x]=1;
	for(int i:g[x]){
		if(i==fa)continue;if(i==1)continue;
		dfs1(i,x);sum_mark[x]+=sum_mark[i];siz[x]+=siz[i]; book[x]+=sum_mark[i]*siz[i]%mod;book[x]%=mod;
	}
	if(mark[x])book[x]+=siz[x];book[x]%=mod;
}
void dfs2(int x,int fa,int from){
	if(mark[x]){
		dp[rt]+=deep[x]-1;dp[rt]+=(siz[from]-deep[x]+1)*qpow(2,mod-2)%mod;dp[rt]%=mod;
	}
	for(int i:g[x]){
		if(i==fa)continue;if(i==1)continue;
		if(x==rt)
		dfs2(i,x,i);
		else dfs2(i,x,from);
	}
}
void dfs3(int x,int fa){
	for(int i:g[x]){
		if(i==fa)continue;if(i==1)continue;
		dp[i]=dp[x]+(tmp-sum_mark[i])+((n-1-siz[i]-1)*(tmp-sum_mark[i])%mod-(book[x]-sum_mark[i]*siz[i]%mod-mark[x]*siz[x]%mod)%mod-(tmp-sum_mark[x])*(n-1-siz[x])%mod)%mod*qpow(2,mod-2)%mod;
//		if(i==3)cout<<dp[3]<<endl;
		dp[i]-=sum_mark[i]-mod+(siz[i]*sum_mark[i]%mod-book[i]+mod)%mod*qpow(2,mod-2)%mod;
//		if(i==5)cout<<sum_mark[i]+(siz[i]*sum_mark[i]%mod-book[i]+mod)%mod*qpow(2,mod-2)%mod<<endl;
		dp[i]%=mod;dp[i]+=mod;dp[i]%=mod;
		dfs3(i,x);
	}
}
signed main(){
	read(n);read(m);
	for(int u,v,i=1;i<=m;i++){
		read(u);read(v);g[u].push_back(v);g[v].push_back(u);
	}
	for(int i:g[1])mark[i]=1;
	rt=g[1][0];dfs1(rt,1);tmp=g[1].size();
	dfs2(rt,1,0);
//	cout<<dp[rt]<<endl;
	dfs3(rt,1);
	dp[1]--;
	cout<<1<<' ';
	for(int i=2;i<=n;i++)cout<<qpow(tmp,mod-2)*(dp[i])%mod+2<<' ';
	return 0;
}

2025/1/14 21:23
加载中...