首页 > 其他分享 >洛谷题单指南-图的基本应用-P5318 【深基18.例3】查找文献

洛谷题单指南-图的基本应用-P5318 【深基18.例3】查找文献

时间:2024-03-26 20:14:23浏览次数:28  
标签:cout int 洛谷题 深基 建图 DFS BFS P5318

原题链接:https://www.luogu.com.cn/problem/P5318

题意解读:图的建立、DFS、BFS模版题。

解题思路:

本题主要考察建图、图的DFS、BFS遍历。

建图方式:领接表vector<int> g[N];

需要注意的是,在DFS、BFS搜索领接点时,需要先将领接点编号排序,满足题目要求的“如果有很多篇文章可以参阅,请先看编号较小的那篇”。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;

vector<int> g[N];
queue<int> q;
bool flag[N];
int n, m, x, y;

void dfs(int u)
{
    cout << u << " ";
    flag[u] = true;
    sort(g[u].begin(), g[u].end());
    for(int i = 0; i < g[u].size(); i++)
    {
        int v = g[u][i];
        if(!flag[v])
        {
            dfs(v);
        }
    }
}

void bfs(int root)
{
    flag[root] = true;
    q.push(root);
    while(q.size())
    {
        int u = q.front(); q.pop();
        cout << u << " ";
        sort(g[u].begin(), g[u].end());
        for(int i = 0; i < g[u].size(); i++)
        {
            int v = g[u][i];
            if(!flag[v])
            {
                q.push(v);
                flag[v] = true;
            }
        }
    }
}

int main()
{
    cin >> n >> m;
    while(m--)
    {
        cin >> x >> y;
        g[x].push_back(y);
    }
    dfs(1); 
    cout << endl;
    memset(flag, 0, sizeof(flag));
    bfs(1);
    
    return 0;
}

 

标签:cout,int,洛谷题,深基,建图,DFS,BFS,P5318
From: https://www.cnblogs.com/jcwy/p/18097440

相关文章

  • 洛谷题单指南-集合-P2814 家谱
    原题链接:https://www.luogu.com.cn/problem/P2814题意解读:已知多组父子关系,找某个人最早的祖先,并查集的应用。解题思路:由于存在真正的父子关系,所以在并查集合并的时候,要把p[x]=y中x设置为子,y设置为父,其余都是并查集的常规操作。由于是计算姓名之间的父子关系,并查集可以用map......
  • 洛谷题单指南-集合-P3879 [TJOI2010] 阅读理解
    原题链接:https://www.luogu.com.cn/problem/P3879题意解读:此题本质上是计算倒排索引,所谓倒排索引,即不是通过文章来找单词,而是通过单词来找文章。解题思路:要建立单词和文章之间的关系,一个单词对应多篇文章,且要按照文章编号排序,可以使用如下数据结构:map<string,set<int>>h;只......
  • 洛谷题单指南-集合-P1955 [NOI2015] 程序自动分析
    原题链接:https://www.luogu.com.cn/problem/P1955题意解读:要判断约数条件是否可以同时满足,主要是要判断不相等的情况。解题思路:对于相等的条件,直接进行集合合并即可;对于不相等的条件,判断两者是否属于同一个集合,如果形成矛盾,则条件不能成立。由于i,j的范围至10^9,定义并查集如果......
  • 洛谷题单指南-集合-P1892 [BOI2003] 团伙
    原题链接:https://www.luogu.com.cn/problem/P1892题意解读:此题与关押罪犯问题非常像,本质上就是要合并所有的朋友。解题思路:首先,初始化并查集;对于每一对人的关系,如果是朋友,直接进行合并;如果是敌人,先查看双方之前是否有记录其他敌人,如果有,则将一方与另一方的敌人进行合并,如果没......
  • 洛谷题单指南-集合-P1621 集合
    原题链接:https://www.luogu.com.cn/problem/P1621题意解读:a~b之间的数,把有大于等于p的公共质因数的数进行合并作为一个集合,求一共有多少个集合。解题思路:要进行集合合并、统计集合数,可以使用并查集,有两种做法:1、暴力法80%的数据在1000范围内,因此通过双重循环枚举,判断两个数的......
  • 【深基4.例13】质数口袋
    【深基4.例13】质数口袋-洛谷https://www.luogu.com.cn/problem/P5723计算质数和的过程中,需要添加一些逻辑来确保求和不会超过给定的上限L,并且需要记录下所求得的质数个数。此外,需要实现一个函数来判断一个数是否为质数。importjava.util.Scanner;publicclassMain{......
  • 洛谷题单算法1-6二分查找与二分答案
    代码仅供参考,不足之处望理解。P2249【深基13.例1】查找#include<iostream>usingnamespacestd;constintN=1e6+5;intn,m,a[N];intmain(){ios::sync_with_stdio(false);//输入cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1......
  • C语言:洛谷题目分享(4)小书童--凯撒密码和笨小猴
    目录1.前言2.俩道题目1.小书童--凯撒密码1.题目背景2.题目描述3.输入格式4.输出格式5.题解2.笨小猴1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言哈喽大家好啊,今天我继续为大家分享洛谷题单的俩道题目,请大家多多支持喔~2.俩道题目1.小书童--凯撒密码......
  • P5266 【深基17.例6】学籍管理(Map)
    #include<bits/stdc++.h>usingnamespacestd;map<string,string>m;intmain(){ intn; cin>>n; while(n--) { inta; stringname,score; cin>>a; if(a==1) { cin>>name>>score; if(m.find(name)!=m.end())m[......
  • 洛谷题单指南-集合-P1525 [NOIP2010 提高组] 关押罪犯
    原题链接:https://www.luogu.com.cn/problem/P1525题意解读:有很多罪犯,要关到两座监狱,有一些罪犯之间有仇,并且可以量化出仇恨值,如果关在一起就会冲突,造成的影响就是仇恨值,要使得造成的影响最小,如果可以完全不起冲突,输出0。解题思路:首先,要让冲突影响最小化,显然应该把仇恨大的罪犯......