80分求调
查看原帖
80分求调
1127980
Gavin2023楼主2025/1/24 14:41
#include<bits/stdc++.h>
using namespace std;
long long k,x[20],y[20],sum[15],num[35];

vector <int> num_to[13];
bool vis[35][15];
long long ans=1;
void dfs(int u,int k)
{
	if(vis[u][k])
	return;
	else
	{
		vis[u][k]=true;
		num[u]++;
		//printf("%d++\n",u);
		//cout<<u<<"++\n";
		for(int i=0;i<sum[k];i++)
		{
			if(!vis[u][num_to[k][i]])
			{
				//printf("%d:%d\n",u,num_to[k][i]);
				dfs(u,num_to[k][i]);
			}
		}
	}
}
int main ()
{
	string n;
	cin>>n>>k;
	for(int i=1;i<=k;i++)
	{
		//scanf("%d%d",&x[i],&y[i]);
		cin>>x[i]>>y[i];
		num_to[x[i]].push_back(y[i]);
		sum[x[i]]++;
	}
	for(int i=0;i<n.size();i++)
	{
		dfs(i+1,int(n[i]-'0'));
		//cout<<int(n[i]-'0')<<"\n";
		ans*=num[i+1];
	}
	//printf("\n");
	//printf("%lld\n",ans);
	cout<<ans<<"\n";
	return 0;
}
2025/1/24 14:41
加载中...