最短路计数 (图上dp+bfs)

题目链接:P1144
对于这道题目,由于是无向无权图,所以没有必要使用dijkstra或者之类的单源最短路径算法,可以直接使用bfs,由于是路径条数的计数,所以就等于bfs遍历节点的时候,深度为n的节点的路径条数等于深度为n-1的节点的条数之和,也就符合dp的原则,后面的状态可以由前面的状态推出。
AC代码:

#include
using namespace std;
vectornumbers[1000005];
int res[1000005];
int vis[1000005];
int val[1000005];
const int mod=100003;
void bfs()
{
    queueans;
    int t=1;
    ans.push(t);
    res[1]=1;
    while(!ans.empty())
    {
        t=ans.front();
        ans.pop();
        for(int i=0;i>m>>n;
    for(int i=0;i>a>>b;
        numbers[a].push_back(b);
        numbers[b].push_back(a);
    }
    bfs();
    cout<<1<

你可能感兴趣的:(个人题解,算法,bfs)