- 广搜好麻烦的啊,还是Floyd好,正好复习(快忘了
- 这道题还有未简化版的noip原题(题解),原题要用高精乘,有空补(留爪)(补完啦,撤爪)
- 老样子,细节见注释
#include<bits/stdc++.h>
using namespace std;
int k,n,f[11],ans;
bool a[11][11];
int main()
{
cin>>n>>k;
for(int i=1;i<=k;i++) {//存图
int x,y;
cin>>x>>y;
a[x][y]=1;
}
for(int i=0;i<=9;i++)//初始化,自己可以变成自己(这是一句废话)
a[i][i]=1;
for(int k=0;k<=9;k++)//Floyd
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
if(a[i][k]&&a[k][j])
a[i][j]=1;
for(int i=0;i<=9;i++)//暴力地累加
for(int j=0;j<=9;j++)
if(a[i][j])f[i]++;
ans=1;//开始累乘
while(n){
ans*=f[n%10];
n/=10;
}
cout<<ans<<endl;
return 0;
}