首页 > 其他分享 >拓扑排序的模板

拓扑排序的模板

时间:2024-03-31 17:14:48浏览次数:19  
标签:排序 int 拓扑 csdn include 模板

拓扑排序的模板,csdn:https://blog.csdn.net/weixin_43872728/article/details/98981923

#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int in[10010];
vector<int> v[10010];
int main()
{
    int n,m;
    while(~scanf("%d %d",&n,&m)&&n&&m)
    {
        memset(in,0,sizeof in);//清空入度
        for(int i=0;i<=n;i++) v[i].clear();
        for(int i=0;i<m;i++)
        {
            int x,y;
            cin >>x>>y;//比如x赢了y  或者y是x的儿子 ;那么就让x指向y;
            v[x].push_back(y);
            in[y]++;//y的入度加1
        }
        priority_queue<int,vector<int>,greater<int> >q;//优先队列,设置从小到大排序,小的在队列下面
        for(int i=0;i<n;i++)
        {
            if(in[i]==0)
                q.push(i);//把入度为0的节点压入队列
        }
        while(!q.empty())
        {
            int xx=q.top();
            q.pop();
            n--;//每次去掉一个节点
            /*下面这段写得很好,实际上就是整个代码思路的核心*/
            for(int i=0;i<v[xx].size();i++)
            {
                int yy=v[xx][i];
                in[yy]--;
                if(!in[yy])
                    q.push(yy);//如果去掉上一个节点之后下一个节点的入度变为0,则压入队列中
            }
        }
        if(n) cout <<"NO"<<endl;//如果有环的话节点数不会为0
        else cout <<"YES"<<endl;
    }
    return 0;
}

标签:排序,int,拓扑,csdn,include,模板
From: https://www.cnblogs.com/zzzsacmblog/p/18106936

相关文章

  • 如何实现快速排序算法?
    如何实现快速排序算法?如何实现快速排序算法?......
  • DIjkstra进阶模板 路径记录 按权重(结点数最小等)记录
    structDIJ{usingi64=longlong;usingPII=pair<i64,i64>;vector<i64>dis,path,node;vector<vector<array<int,3>>>G;intn;DIJ(){}DIJ(intn):n(n){node.resize(n+1,1);......
  • 函数模板类型推断
    先看一段代码:template<typenameT>voidmyfunc(T&tmprv){cout<<"--------------------begin--------------------"<<endl;usingboost::typeindex::type_id_with_cvr;cout<<"T="type_id_with_cvr<T&......
  • 不读概念,用过程轻松理解并实现拓扑排序
    目录1.有向无环图2.AOV网:顶点活动图3.拓扑排序4.实现拓扑排序5.力扣OJ1.有向无环图顾名思义,边有向,图中没有回路。这里只需要知道各顶点的入度和出度怎么计算即可。2.AOV网:顶点活动图在有向无环图中,用顶点来表示一个活动,用边来表示活动的先后顺序的图结构。......
  • WPF中继承ItemsControl子类控件数据模板获取选中属性
    需求场景列表类控件,如ListBox、ListView、DataGrid等。显示的行数据中,部分内容依靠选中时触发控制,例如选中行时行记录复选,部分列内容控制显隐。案例源码以ListView为例。Xaml部分<ListViewItemsSource="{BindingMyPropertys}"IsManipulationEnabled="False"><List......
  • P8306 【模板】字典树
    原题链接题解1.建议去B站上看看动画演示,你就明白怎么回事了2.如何用代码实现呢?看完你就明白了code#include<bits/stdc++.h>usingnamespacestd;intnum=0;inttree[3000006][75]={0};intcnt[3000006]={0};chars[3000006];intans;intt,n,q;//放全局变量是为了加......
  • 算法模板 v1.10.5.20240330
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • 多态在模板类中的应用
    先看一个多态的例子:classHuman{public:virtualvoideat=0;virtual~Human(){}};classMen:publicHuman{public:virtualvoideat(){cout<<"男人"<<endl;}};classWomen:publicHuman{public:virtu......
  • 帝国cms自适应html5古诗词历史名句书籍文章资讯网站源码整站模板sinfo插件带采集会员
    (购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源)帝国cms自适应html5古诗词名句书籍文章资讯网站源码整站模板s......
  • 并查集模板
    目录并查集的存储结构并查集查询路径压缩并查集合并合并优化--启发式优化合并优化--按秩合并可撤销并查集算法原理重要操作实现并查集是一种巧妙优雅的数据结构,主要用于解决元素分组和不相交集合的合并和查询问题。并查集是大量的树(单个节点也算是树)经过合并生成一......