zoukankan      html  css  js  c++  java
  • 洛谷P3916题解

    原题:

     思路:

    emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

    这玩意儿不就是一个深搜解决?

    一看难度,绿的

    行吧看来我把它想简单了

    而且深搜确实有些问题

    就题面来看,如果进行深搜,就意味着我们要不断地访问同一个点

    浪费时间啊

    能不能一次求出呢?

    思考过后我们发现,显然,如果一个点能被多个点访问,那么这个点也可以通过反向的边访问多个点

    而如果我们将开始顺序由“从小到大”变为“从大到小”

    实际上就已经可以用一次遍历求出多个点的解

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int nxt[100005],last[100005],to[100005],tot,book[100005];
    void DFS(int dep,int u)
    {
        if(book[dep])
            return;
        book[dep]=u;
        for(int i=last[dep];i!=0;i=nxt[i])
            if(!book[to[i]])
                DFS(to[i],u);
    }
    void add_edge(int a,int b)
    {
        nxt[++tot]=last[b];
        last[b]=tot;
        to[tot]=a;
    }
    int main()
    {
        scanf("%d %d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            int a1,a2;
            scanf("%d %d",&a1,&a2);
            add_edge(a1,a2);
        }
        for(int i=n;i;i--)
            DFS(i,i);
        for(int i=1;i<=n;i++)
            printf("%d ",book[i]);
        return 0;
    }
  • 相关阅读:
    [bzoj4408][Fjoi2016]神秘数
    BZOJ1102: [POI2007]山峰和山谷Grz
    BZOJ1098: [POI2007]办公楼biu
    BZOJ1097: [POI2007]旅游景点atr
    GDOI2018 新的征程
    BZOJ2084: [Poi2010]Antisymmetry
    回文树详解
    Codeforces739E. Gosha is hunting
    一道题17
    LOJ#6002. 「网络流 24 题」最小路径覆盖
  • 原文地址:https://www.cnblogs.com/lujin49/p/13873374.html
Copyright © 2011-2022 走看看