• 【luogu1137】旅行计划 [拓扑排序]


    P1137 旅行计划

    最长路 DAG 拓扑排序的过程中直接 DP

    算是从头开始图论的学习....emmmmmmm

    通常情况下,在实现的时候会维护一个队列以及每个结点的入度。在删 除边的时候顺便把相应结点的入度减去,当这个结点入度为 0 的时候直接 将其加入队列。

    大概对图论形成了惯性思维 看到就怕QAQ

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<queue>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<stack>
     7 #include<algorithm>
     8 using namespace std;
     9 #define ll long long
    10 #define rg register
    11 const int N=100000+5,M=200000+5,inf=0x3f3f3f3f,P=19650827;
    12 int n,m,r[N],f[N];
    13 template <class t>void rd(t &x)
    14 {
    15     x=0;int w=0;char ch=0;
    16     while(!isdigit(ch)) w|=ch=='-',ch=getchar();
    17     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    18     x=w?-x:x;
    19 }
    20 
    21 int head[N],tot=0;
    22 struct edge{int v,nxt;}e[M];
    23 void add(int u,int v){
    24     e[++tot]=(edge){v,head[u]};head[u]=tot;
    25 }
    26 
    27 queue<int> q;
    28 void topsort(){
    29     for(rg int i=1;i<=n;++i)
    30     if(!r[i]) q.push(i),f[i]=1;
    31     while(!q.empty()){
    32         int u=q.front();q.pop();
    33         for(rg int i=head[u];i;i=e[i].nxt){
    34             int v=e[i].v;
    35             --r[v];
    36             if(!r[v]) q.push(v),f[v]=f[u]+1;
    37         }
    38     }
    39 }
    40 
    41 int main(){
    42     memset(r,0,sizeof(r));
    43     rd(n),rd(m);
    44     for(rg int i=1;i<=m;++i){
    45         int u,v;
    46         rd(u),rd(v);
    47         add(u,v),++r[v];
    48     }
    49     topsort();
    50     for(rg int i=1;i<=n;++i) printf("%d
    ",f[i]);
    51     return 0;
    52 }
    53  
  • 相关阅读:
    Entity Framework简介
    Java学习笔记-spring-Bean作用于
    Java学习笔记-spring-Bean实例化
    第四章--第二节:类
    为什么越来越少的人用jQuery
    年入50万的方法
    第一节--项目介绍和初始化
    第四章--第一节:函数
    第一节--API爬虫--环境设置与课程简介
    第三章--第六节:元祖
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/10923484.html
Copyright © 2020-2023  润新知