rt,本地运行没有问题
过于玄学
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define LL long long
using namespace std;
int n[35], k, a[20][20], f[20], ans[1000];
string s;
int main()
{
cin >>s;
int ln=s.size(), la;
for (int i=0; i<ln; i++)
n[i]=s[ln-i-1]-'0';
scanf ("%d", &k);
for (int i=1; i<=k; i++)
{
int u, v;
scanf ("%d%d", &u, &v);
a[u][v] = 1;
}
for (int k=0; k<10; k++)
for (int i=0; i<10; i++)
for (int j=0; j<10; j++)
if (a[i][k] && a[k][j])
a[i][j] = 1;
for (int i=0; i<=9; i++)
{
a[i][i] = 1;
for (int j=0; j<=9; j++)
f[i]+=a[i][j];
}
int a[1000];
for (int u=0; u<=9; u++)
{
int l=0, x=f[u];
while (x)
{
a[l++] = x%10;
x/=10;
}
if (u==0)
for (int i=0; i<l; i++)
ans[i] = a[i];
la+=100;
while (ans[la-1]==0 && la>1)
la--;
for (int i=la-1; i>=0; i--)
for (int j=l-1; j>=0; j--)
{
la = max(la, i+j);
ans[i+j] = ans[i]*a[j];
if (ans[i+j]>=10)
{
ans[i+j+1] += ans[i+j]/10;
ans[i+j] %= 10;
}
}
}
while (ans[la-1]==0 && la>1)
la--;
for (int i=la-1; i>=0; i--)
printf ("%d", ans[i]);
return 0;
}