"蔚来杯"2022牛客暑期多校训练营10

F Shannon Switching Game?

分析:

因为是cutplayer 先手 !!!!

所以考虑与t 相连的点能到达t 该满足什么条件 显然应保证至少有两条边连向t

在考虑对于任意点u ,该如何保证到达能够到达t 的点,显然要保证至少有两条边连向能够到达t 的点

按时此思路跑一遍B F S 即可

因为本题的点数比较少 边数比较多 所以用邻接表会好些

#include<bits/stdc++.h>
using namespace std;
int n,m,s,t;
int a[105][105],vis[105],cnt,dp[105];
void bfs(){
	queue<int>qu;
	qu.push(t);
	vis[t]++;
	while(!qu.empty()){
		int k=qu.front();
		qu.pop();
		for(int i=1;i<=n;i++){
			if(a[i][k]){
				dp[i]+=a[i][k];
				if(!vis[i]&&dp[i]>1){
					qu.push(i);
					vis[i]++;
				} 
			}
		}
	}
}
void solve(){
	cin>>n>>m>>s>>t;
	memset(a,0,sizeof(a));
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		a[u][v]++;
		a[v][u]++;
	}
	memset(vis,0,sizeof(vis));
	memset(dp,0,sizeof(dp));
	bfs();
	if(dp[s]>1){
		puts("Join Player");
		return;
	}
	puts("Cut Player");
}
int T;
int main(){
	cin>>T;
	while(T--)solve();
}

H Wheel of Fortune

\

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353,N=16e6+5;
int A,B,a[10],b[10],n=7;
int dp[15],fac[N],inv[N],res,cnt,_a,_b,ans;
int fpow(int x,int p){for(res=1;p;x=1ll*x*x%mod,p>>=1)if(p&1)res=1ll*res*x%mod;return res;}
int C(int a,int b){
	return 1ll*fac[b]*fpow(fac[a],mod-2)%mod*fpow(fac[b-a],mod-2)%mod;
}
void init(){//预处理阶乘
	fac[0]=fac[1]=1;
	for(int i=2;i<=N;i++)fac[i]=1ll*fac[i-1]*i%mod;
}
int main(){
	init();
	cin>>A;A=(A-1)/10+1;
	for(int i=1;i<=n;i++)cin>>a[i];
	cin>>B;B=(B-1)/10+1;
	for(int i=1;i<=n;i++)cin>>b[i];
	for(int i=0;i<A;i++){
		ans=(1ll*ans+1ll*C(B-1,B+i-1)*fpow(fpow(2,B+i),mod-2)%mod)%mod;
	}
	cout<<ans;
}

I Yet Another FFT Problem?

在这个里面已经写过

https://www.cnblogs.com/wzxbeliever/p/16670456.html

posted @ 2022-09-09 10:41  wzx_believer  阅读(23)  评论(0编辑  收藏  举报