zoukankan      html  css  js  c++  java
  • 4.7 每日一题题解

    珂朵莉的无向图

    涉及知识点:

    • BFS

    solution:

    • 真正掌握了BFS的应该可以一眼看出来这是BFS模板题吧~
    • 找了篇包含好多BFS题目的博客https://www.cnblogs.com/tigerisland/category/1083603.html
    • 回到这道题目,题解给出了一行解释:每次把一堆点加进去BFS即可
    • 没骗你们吧,这就是道BFS模板题,我们只需要将所有给出的点,扔到队列里,BFS直到empty为止,记录一下每个点到t个点的最短距离(如果没听懂就说明还是没理解BFS,滚去学BFS)

    std:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn = 5005;
    vector<int> v[maxn];
    int dis[maxn];
    int n,m,p,t,s,x,y;
    struct node{
        int x,len;
    };
    queue<node> q;
    void bfs()
    {
        int ans = 0;
        while(!q.empty()){
            node now = q.front();
            q.pop();
            for(int i=0;i<v[now.x].size();i++){
                if(dis[v[now.x][i]])
                    continue ;
                dis[v[now.x][i]] = now.len + 1;
                q.push(node{v[now.x][i] , now.len + 1});
            }
        }
        for(int i=1;i<=n;i++)
            if((dis[i] == -1 ) || (dis[i] != 0 && dis[i] <= s))
                ans++;
        cout<<ans<<endl;
        return ;
    }
    int main()
    {
        cin>>n>>m>>p;
        for(int i=1;i<=m;i++)
            cin>>x>>y,v[x].push_back(y),v[y].push_back(x);
        while(p--){
            cin>>t>>s;
            memset(dis,0,sizeof(dis));
            for(int i=1;i<=t;i++)
                cin>>x,q.push(node{x,0}),dis[x] = -1;
            bfs();
        }
        return 0;
    }
    
  • 相关阅读:
    马拦过河卒
    最小生成树 kruskal算法
    链表,关键是结构体的快排
    Shortest Prefixes 字典树
    串的匹配
    A Beautiful Meadow
    Tiling
    邻接矩阵的宽度遍历
    邻接矩阵的深度遍历
    Form1.frm
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/12651542.html
Copyright © 2011-2022 走看看