zoukankan      html  css  js  c++  java
  • P1137 旅行计划

    前言:

    这是道图论题,当然,搜索也行;

    做题的中心我放在拓扑排序上

    需要帮助吗(什么是拓扑排序?

    分析:

    拓扑排序的模板一个!!!

    题目:P1137 旅行计划

    代码:

    /*
    说真的,其实这道题很简单
    
    就是拓扑排序后把每个点的“等级”
    输出一遍
    
    问题是,拓扑排序是什么 
    队列啊
    (因为我也解释不清) 
    
    qwq 
    */
    
    
    #include<iostream>
    #include<queue>
    
    using namespace std;
    queue<int> q;
    //存链表不能停 
    struct lian{
        int to;
        int next;
    }lb[200010];
    int le[201000];//等级 
    int head[200100]; 
    int t=0;
    int n,m,ans;
    int ind[200100];//入度 
    void add(int from,int to){
        lb[++t].next=head[from];// 指向的下一条边的下标 
        lb[t].to=to;//指向的点 
        head[from]=t;//出发点所连的第一条边的编号 
    }//既然你会看这个,就一定会链表吧 
    int main(){
        cin>>n>>m;
        for(int i=1;i<=m;++i)
        {
            int k,j;
            cin>>k>>j;
            add(k,j);
            ind[j]++;//统计入度 
        }
        for(int i=1;i<=n;++i){
            if(!ind[i]){//找到无入边的点 
            q.push(i);//压进队列 
            le[i]=1;
            }
            
        }//拓扑排序 
        while(q.size()){
            int u;
            u=q.front();q.pop();
            for(int i=head[u];i;i=lb[i].next)//遍历所连的边 
            {
                int v=lb[i].to;//找到指向的点 
                le[v]=max(le[v],le[u]+1);//计算该点的等级 
                if(!--ind[v]) q.push(v);//减入度,删边,为零则压入 
            }
        }
        for(int i=1;i<=n;++i)
        cout<<le[i]<<endl;//输出等级 
        
    }

    (很清楚明了吧)

    (在MIKU小姐的帮助下,一个小时做完了)

    THANKS FOR YOUR READING

    THAT'S ALL.

  • 相关阅读:
    名字对战,看看你名字里蕴藏的力量
    趣味小游戏,测试你们做过的傻事
    贪吃蛇小游戏的初步尝试制作
    实现成绩表的初步想法
    结构体的一些小知识点
    慢慢完善-小游戏之推箱子
    よんにち
    さんか表单 框架 样式表和样式表选择器
    Two Day
    One day
  • 原文地址:https://www.cnblogs.com/For-Miku/p/10505643.html
Copyright © 2011-2022 走看看