https://www.luogu.com.cn/problem/P1037
经典DFS+高精乘法
非常菜,中间下载了一次测试点才发现要用高精,写的不好代码可以参考,因为题主真的很菜。
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool a[10][10];
int b[10];
bool c[10];
int s=1;
int dfs(int x,int y)
{
for(int i=0;i<=9;i++)
{
if(y!=i&&a[x][i]==1&&!c[i])
{
s++;
c[i]=1;
dfs(i,y);
}
}
return s;
}
signed main()
{
string k;
cin>>k;
int n;
cin>>n;
while(n--)
{
int x,y;
cin>>x>>y;
a[x][y]=1;
}
for(int i=0;i<=9;i++)
{
b[i]=dfs(i,i);
s=1;
memset(c,0,sizeof(c));
}
int l=k.length();
vector <int> ans;
ans.push_back(1);
for(int i=0;i<l;i++)
{
int p=(int)k[i]-'0';
for(int j=0;j<ans.size();j++)
ans[j]*=b[p];
for(int j=0;j<ans.size();j++)
{
if(ans[j]>=10)
{
int c=ans[j]/10;
ans[j]=ans[j]%10;
if(j!=ans.size()-1)
ans[j+1]+=c;
else
ans.push_back(c);
}
}
}
for(int i=ans.size()-1;i>=0;i--)
cout<<ans[i];
}
也是应学长要求建立自己的题单= =。
感觉写博客不会丢失吧。