2014年9月13日 星期六

2014/9/13 codevs 1009 产生数

// http://codevs.cn/problem/1009/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>

using namespace std;

char c[40]; int k;
vector<int> v[10];
bool visit[10];
int to[10];

void DFS(int O)
{
    visit[O] = true;

    for(int vi = 0, vn = v[O].size(); vi < vn; vi++)
        if( !visit[v[O][vi] ] ) DFS(v[O][vi] );

    return;
}

int main()
{
    scanf(" %s %d", c, &k);

    for(int ki = 0; ki < k; ki++)
    {
        int a, b;
        scanf("%d %d", &a, &b);

        v[a].push_back(b);
    }

    for(int i = 0; i < 10; i++)
    {
        fill(visit, visit+10, false);
        DFS(i);

        for(int j = 0; j < 10; j++)
            if( visit[j] ) to[i]++;
    }

    unsigned long long Ans = 1;

    for(int ci = 0, cn = strlen(c); ci < cn; ci++)
    {
        int p = c[ci]-'0';
        Ans *= to[p];
    }

    printf("%llu\n", Ans);
}

沒有留言:

張貼留言