首页 > 其他分享 >Atcoder_[abc284E]Count Simple Paths题解

Atcoder_[abc284E]Count Simple Paths题解

时间:2023-08-18 11:56:57浏览次数:54  
标签:Count Atcoder vis int 题解 dfs 访问 1e6 号点

题目链接
这题就是很简单的图上深搜,我觉得放在E题太水了,代码里有详细注释。

#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<int> v[200010]; // 邻接表
int ans; // 答案
bool vis[200010]; // vis[i] 记录 i 号点有没有被访问过

void dfs(int x)
{
    if(ans >= 1e6) // 如果答案已经大于等于 1e6 ,则直接返回,因为再加都没用了,最后会被输出成 1e6
        return ;
    ans++; // 这是一条简单路径,答案加一
    for(int i = 0; i < v[x].size(); i++) // 对于 x 所能到达的所有点
    {
        if(!vis[v[x][i]]) // 如果这个点没被访问过(因为简单路径中不能出现一个点被访问 2 次的情况)
        {
            vis[v[x][i]] = true; // 将这个点设为被访问过了的状态
            dfs(v[x][i]); // 继续深搜
            vis[v[x][i]] = false; // 回溯
        }
    }
}

signed main() // 读代码的好习惯:先从 main() 函数读起
{
    int n,m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int a,b;
        cin >> a >> b;
        v[a].push_back(b); // 给 a->b 建一条边
        v[b].push_back(a); // 因为是双向道,所以要再给 b->a 建一条边
    }
    vis[1] = true; // 1 号点是起点,肯定已经被访问过了
    dfs(1); // 从 1 号点开始深搜
    cout << min(ans,1000000LL) << "\n"; // 输出答案,因为题目中说了,要取 min( 答案 , 1e6)
    return 0;
}

记录

本人码风可能有点特殊,希望大家能接受。

标签:Count,Atcoder,vis,int,题解,dfs,访问,1e6,号点
From: https://www.cnblogs.com/cookiebread/p/abc284e.html

相关文章

  • ARC145C 题解
    problem&blog。小清新结论题。提供一个不需要脑子就可以AC的方法:看样例解释,猜到一定是\((1,2)(3,4)\)这样子,于是暴力,把前几项输进OEIS里,做完了。显然取\(\forall|A_i-B_i|=1\)最优。证明:对于\(x-3,x-2,x-1,x\),配对:\((x-3,x-2)(x-1,x)\)的贡献为\((x-3)(x-2)+......
  • vue3项目,vie框架,相对路径图片,测试时正常显示,发布后不显示问题解决方案
    参考Vite官网的说明,修改图片的引用路径后,图片发布后可以正常显示constimgUrl=newURL('./img.png',import.meta.url).hrefdocument.getElementById('hero-img').src=imgUrl官网地址: https://cn.vitejs.dev/guide/assets.html ......
  • CLion的远程同步功能,删除文件没有进行同步问题解决
    在使用CLion的deployment功能时。正常修改增加都会自动同步到远程。但是删除文件或者文件夹时,远程的文件没有删除,重新同步后,原来删除的文件又出现了。这是因为Clion默认没有将删除的同步打开:Settings->Deployment->Options->勾选:Deleteremotefileswhenlocalaredele......
  • [AGC001E] BBQ Hard 题解
    计数题好题。思路考虑\(\dbinom{n+k}{k}\)的几何意义。即从\((1,1)\)到\((k,n)\)只往上或往右走的方案数。由于这个在几何上坐标可以平移。也就是\((1-x,1-y)\)到\((k-x,n-y)\)的方案与\((1,1)\)到\((k,n)\)的方案数是一样的。那么我们就可以求出所有\((1-a_......
  • [AGC002F] Leftmost Ball 题解
    很好的一道组合题。思路直接设\(dp_{i,j}\)表示已经放了\(i\)个白点与\(j\)中颜色。然后直接组合数算即可。CodeAC记录。......
  • [AGC002E] Candy Piles 题解
    比较简单的题。思路考虑这个玩意在几何上的意义。发现就是要么往上走,要么往右走。那么就十分容易找到规律。找到规律后也很容易感性理解。CodeAC记录。......
  • [AGC002D] Stamp Rally 题解
    可以看做一道比较套路的的$kruskal$重构树。但或许也是一道复习与入门的好题。思路考虑把图论问题转化为树上问题。发现所求的为路径上最大的最小。容易想到$kruskal$重构树。发现由于从两端一起走,不能直接处理。那么就可以在外面套一个二分,内部直接倍增处理即可。Cod......
  • [AGC001F] Wide Swap 题解
    特别有意思的思维题。思路参考题解第一位的神仙思路。将排列\(a_i\)变为\(b_{a_i}\)。限制便变为了只能交换相邻的两个差大于\(k\)的点。那么这个限制就已经与普通排序很相似。考虑使用归并排序。一个点可以跑到其他点的前面要求这一连续段都是比它加\(k\)都不大。......
  • UVA1435 Business Cards 题解
    题目链接思路一道找规律思维题,代码非常简单。能否把\(c\timesd\)的矩阵分成若干个\(a\timesb\)的矩阵,其实就是问你\(a\)或\(b\)中有没有\(c\)或\(d\)的因数。只要存在一组,即可分割成题目所要求的矩阵,输出YES;反之,输出NO。注意:其实每个测试点都有多组数据,但题......
  • UVA10812 Beat the Spread! 题解
    题目链接思路大家应该都知道绝对值是什么吧?那么,我们不妨直接设\(a\gtb\),这样就省去了一次分类讨论的麻烦,大大降低了程序的复杂度。即可得到此二元一次含参方程组:\[\begin{cases} a+b=s\\ a-b=t\end{cases}\]运用二元一次方程的消元法,解得:\[\begin{cases} a=\frac{s+t}......