样例二不过求调,悬关
查看原帖
样例二不过求调,悬关
755916
xiazha楼主2024/8/17 19:12
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353
int n,m,l[5005],r[5005],dp[5005][5005],ans[5005],g[505][505][505];
int fastpow(int a,int b)
{
	int res=1;
	while(b)
	{
		if(b&1) res=res*a%mod;
		b>>=1;a=a*a%mod;
	}
	return res;
}
signed main()
{
	cin>>n;
	for(int i=2;i<=n;i++) cin>>l[i]>>r[i];
	for(int i=2;i<=n;i++)
		for(int j=i;j<=n;j++)
		{
			dp[j][j]=1;	
			for(int k=l[j];k<=r[j];k++)
				dp[i][j]+=dp[i][k]*fastpow(r[j]-l[j]+1,mod-2)%mod,dp[i][j]%=mod;
		}
	for(int i=2;i<=n;i++)
		for(int j=i;j<=n;j++)
			for(int k=i;k<=n;k++)
			{
				if(j<k) g[j][j][k]=1;
				else g[k][j][k]=1;
				for(int ll=l[k];ll<=r[k];ll++)
					g[i][j][k]+=g[i][j][ll]*fastpow(r[k]-l[k]+1,mod-2)%mod,g[i][j][k]%=mod;
				for(int ll=l[j];ll<=r[j];ll++)
					g[i][j][k]+=g[i][ll][k]*fastpow(r[j]-l[j]+1,mod-2)%mod,g[i][j][k]%=mod;
			}
	cin>>m;
	while(m--)
	{
		int u,v,w;
		cin>>u>>v>>w;
		for(int j=2;j<=n;j++) ans[j]+=((dp[j][u]+dp[j][v]-2*g[j][u][v])%mod+mod)%mod*w%mod,ans[j]%=mod;
	}
	for(int i=2;i<=n;i++) cout<<ans[i]<<" ";
	return 0;
}
2024/8/17 19:12
加载中...