今天讲了topological sort

问题:

判环:记录入队的点数,若<n则有环,可证;

算法:o(n):queue or  stack,而不是o(n^2)枚举

#. 关系运算图(vijos1094)

    描述
提交
自定义测试 题目描述 给出一有向图,图中每条边都被标上了关系运算符‘<’,‘>’,‘=’。现在要给图中每个顶点标上一个大
于等于0小于等于k的某个整数使所有边上的符号得到满足。若存在这样的k,则求最小的k,
若任何k都无法满足则输出NO。 例如下表中最小的k为2。 结点1>结点2 结点2>结点3 结点2>结点4 结点3=结点4 如果存在这样的k,输出最小的k值;否则输出‘NO’。
输入格式 共二行,第一行有二个空格隔开的整数n和m。n表示图的结点个数,m表示图的边数,
其中1<=n<=, <=m<=。全部结点用1到n标出,图中任何二点之间最多只有一条边,
且不存在自环。 第二行共有3m个用空格隔开的整数,第3i-2和第3i-(<=i<=m)
个数表示第i条边的顶点。第3i个数表示第i条边上的符号,其值用集合{-,,}中的数表示:
-1表示‘<’, 表示‘=’, 1表示‘>’
输出格式 仅一行,如无解则输出‘NO’;否则输出最小的k的值。
输入样例 - - - 输出样例 限制与约定 时间限制:1s 空间限制:128MB
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn=1e3+;
const int maxm=1e4+;
inline int read()
{
int a=;bool b=;char x=getchar();
while(x<''||''<x){
if(x='-')b=;
x=getchar();
}
while(''<=x&&x<=''){
a=(a<<)+(a<<)+x-'';
x=getchar();
}
return b ? a : -a ;
}
int f[maxn];
inline int find(int x){
if(f[x]==x)return x;
else return f[x]=find(f[x]);
}
int first[maxn],next[maxm],to[maxm],edge_count;
inline void add(int x,int y){
edge_count++;
to[edge_count]=y;
next[edge_count]=first[x];
first[x]=edge_count;
}
int Ans,ans[maxn],n,m,cnt,indegree[maxn],queue[maxn];
inline void topological_sort()
{
int rear=,front=;
for(int i=;i<=n;i++){
if(find(i)==i && !indegree[i]){
queue[front++]=i;
}
}
while(rear<front){
int pos=queue[rear];
for(int i=first[pos];i;i=next[i]){
int v=to[i];
indegree[v]--;
if(!indegree[v]){
queue[front++]=v;
ans[v]=ans[pos]+;
Ans=max(Ans,ans[v]);
}
}
rear++;
}
if(front<cnt){
printf("NO\n");
exit();
}
}
int u[maxm],v[maxm],b[maxm];
int main()
{
cnt=n=read();m=read();
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=m;i++){ u[i]=read();v[i]=read();b[i]=read(); if(!b[i]){
int ru=find(u[i]);int rv=find(v[i]);
f[ru]=rv;
cnt--;
}
}
for(int i=;i<=m;i++){
int ru=find(u[i]);int rv=find(v[i]);
if(b[i]==){//以 小<于 为边
add(rv,ru);
indegree[ru]++;
}
else if(b[i]==-){
add(ru,rv);
indegree[rv]++;
}
}
topological_sort(); printf("%d",Ans);
}

topological sort~~~~初学的更多相关文章

  1. 【拓扑排序】【线段树】Gym - 101102K - Topological Sort

    Consider a directed graph G of N nodes and all edges (u→v) such that u < v. It is clear that this ...

  2. topological sort

    A topological sortof a dag G  is a linear ordering of all its vertices such that if G contains anedg ...

  3. 拓扑排序(Topological Sort)

    Graph 拓扑排序(Topological Sort) 假设一个应用场景:你用 C 编写了一个爬虫工具,其中有很多自定义的库:queue.c.queue.h.stack.c.stack.h.heap ...

  4. Some facts about topological sort

    Definition: a topological sort of a DAG G is a sort such that for all edge (i,j) in G, i precedes j. ...

  5. 6-16 Topological Sort(25 分)

    Write a program to find the topological order in a digraph. Format of functions: bool TopSort( LGrap ...

  6. [Algorithms] Topological Sort

    Topological sort is an important application of DFS in directed acyclic graphs (DAG). For each edge ...

  7. [MIT6.006] 14. Depth-First Search (DFS), Topological Sort 深度优先搜索,拓扑排序

    一.深度优先搜索 它的定义是:递归探索图,必要时要回溯,同时避免重复. 关于深度优先搜索的伪代码如下: 左边DFS-Visit(V, Adj.s)是只实现visit所有连接某个特定点(例如s)的其他点 ...

  8. Leetcode: Alien Dictionary && Summary: Topological Sort

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

  9. 拓扑排序 Topological Sort

    2018-05-02 16:26:07 在计算机科学领域,有向图的拓扑排序或拓扑排序是其顶点的线性排序,使得对于从顶点u到顶点v的每个有向边uv,u在排序中都在v前.例如,图形的顶点可以表示要执行的任 ...

随机推荐

  1. Go语言中的Package问题

    问题一.Go使用Package组织源码的好处是什么? 1.任何源码属于一个包 2.用包组织便于代码的易读和复用 问题二.Go语言中Package的种类 Go语言中存在两种包.一种是可执行程序的包.一种 ...

  2. CF1153D Pigeon d'Or

    Description 给一棵树,每个点是子节点的最大值或最小值,将叶子节点填上整数,使这棵树的根最大. Solution 明显的\(dp\)题,代码很短. 分类讨论如下: 1.如果是叶子节点,\(d ...

  3. ORCAL Merge into用法总结

    简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据. 有一个表T,有两个字段a.b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在 ...

  4. [BJOI2019]奥术神杖(分数规划+AC自动机+DP)

    题解:很显然可以对权值取对数,然后把几何平均值转为算术平均值,然后很显然是分数规划.先对每个模式串建立AC自动机,每个节点w[i],sz[i]分别表示以其为前缀的字符串,然后再二分最优解k,然后w[i ...

  5. (双指针) leetcode 27. Remove Element

    Given an array nums and a value val, remove all instances of that value in-place and return the new ...

  6. X-pack 6.4.0 破解

    X-package 6.4.0 破解 获取x-pack-core-6.4.0.jar 下载 elasticsearch下载页面:https://www.elastic.co/downloads/ela ...

  7. Maven之阿里云镜像仓库配置

    方式一:全局配置:修改maven的setting.xml配置 在mirrors节点下面添加子节点: <mirror> <id>nexus-aliyun</id> & ...

  8. python放弃篇(Django/爬虫)

    第一篇:Django系列 第二篇:爬虫系列 待续……

  9. ccf 201903-5 317任务

    [题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...

  10. shell 批量远程主机执行命令

    [yunwei@Y24-209 ~]$cat ls.sh #!/bin/bash ip55=`cat ip1` for i in $ip55;do ping -c 1 $i if [ $? -eq 0 ...