【题解-信息学奥赛一本通】1361:产生数(Produce) 📅 2026/7/24 1:33:30 题目1361产生数(Produce)题目描述给出一个整数nn≤2000和k个变换规则k≤15。规则① 1个数字可以变换成另1个数字② 规则中右边的数字不能为零。例如n234k2规则为2 → 53 → 6上面的整数234经过变换后可能产生出的整数为包括原数234534264564共4种不同的产生数。求经过任意次的变换0次或多次能产生出多少个不同的整数。仅要求输出不同整数个数。输入第一行包含两个整数 n,k。接下来 k 行每行包含两个整数 xi,yi表示一条规则为 xi→yi。输出格式为一个整数满足条件的整数个数。时空限制1s / 64MB样例输入234 2 2 5 3 6样例输出4代码#includebits/stdc.husingnamespacestd;typedefpairint,intPII;constintN2000010;intn,k,x,y,ans;vectorinta;PII g[N];boolvis[N];voidsplitnum(intnum){a.clear();while(num0){a.push_back(num%10);num/10;}reverse(a.begin(),a.end());}inttrans(intt,inty){intsum0;for(inti0;ia.size();i){if(i!t)sumsum*10a[i];elsesumsum*10y;}returnsum;}voidbfs(intm){queueintq;q.push(m);vis[m]true;ans1;while(!q.empty()){inttq.front();q.pop();splitnum(t);for(inti0;ia.size();i)for(intj0;jk;j)if(a[i]g[j].first){inttttrans(i,g[j].second);if(!vis[tt]){q.push(tt);vis[tt]true;ans;}}}}intmain(){cinnk;for(inti0;ik;i){cinxy;g[i].firstx,g[i].secondy;}bfs(n);coutans;return0;}结果