• wenbao与搜索


    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    http://agc013.contest.atcoder.jp/tasks/agc013_b

    给n个点,m条边,找一条路径,要求与首尾相连的所有点必须在路径里面

    两次dfs搞定(仔细体会为什么?)

    很好的一个题

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 const int maxn = 1e5+10;
     5 vector<int> v[maxn];
     6 bool vis[maxn];
     7 int a[maxn], num;
     8 void d(int x){
     9     for(int i = 0; i < v[x].size(); ++i){
    10         int xx = v[x][i];
    11         if(vis[xx]) continue;
    12         vis[xx] = true, a[++num] = xx;
    13         d(xx); return ;
    14     }
    15 }
    16 int main(){
    17     int n, m, x, y, num2;
    18     scanf("%d%d", &n, &m);
    19     for(int i = 0; i < m; ++i){
    20         scanf("%d%d", &x, &y);
    21         v[x].push_back(y), v[y].push_back(x);
    22     }
    23     vis[1] = true;
    24     a[num = 1] =  1;
    25     d(1),  num2 = num, d(1);
    26     printf("%d
    ", num);
    27     for(int i = num2; i >= 1; --i){
    28         if(i == num2) printf("%d", a[i]);
    29         else printf(" %d", a[i]);
    30     }
    31     for(int i = num2+1; i <= num; ++i){
    32         printf(" %d", a[i]);
    33     }
    34     printf("
    ");
    35     return 0;
    36 }

    -----------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------

    只有不断学习才能进步!

  • 相关阅读:
    grep 匹配打印的上下几行
    java List<String>的初始化
    HashMap优雅的初始化方式以及引申
    protocol buffer开发指南(官方)
    20种常用的DOS命令小结
    linux xfs文件系统无法用readdir获取dirent文件类型d_type则用stat获取暨stat函数讲解
    java中jar命令打包一个文件夹下的所有文件
    C/C++中的格式化字符
    自定义标签(JspFragment类、invoke方法、开发带属性的标签)
    java中Scanner类nextLine()和next()的区别和使用方法
  • 原文地址:https://www.cnblogs.com/wenbao/p/6739182.html
Copyright © 2020-2023  润新知