今天讲了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. 差分约束 HDU - 1384 HDU - 3592 HDU - 1531 HDU - 3666

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. spring Boot 入门--为什么用spring boot

    为什么用spring boot 回答这个问题不得不说下spring 假设你受命用Spring开发一个简单的Hello World Web应用程序.你该做什么? 我能想到一些 基本的需要.  一个项目 ...

  3. 04--STL序列容器(Stack和Queue)

    总括: stack和queue不支持迭代 一:栈Stack (一)栈的简介 stack是堆栈容器,是一种“先进后出”的容器. stack是简单地装饰deque容器而成为另外的一种容器. (二)栈的默认 ...

  4. [源码分析]读写锁ReentrantReadWriteLock

    一.简介 读写锁. 读锁之间是共享的. 写锁是独占的. 首先声明一点: 我在分析源码的时候, 把jdk源码复制出来进行中文的注释, 有时还进行编译调试什么的, 为了避免和jdk原生的类混淆, 我在类前 ...

  5. windows 7 命令修改IP地址

    netsh interface ip set address "本地连接"  static 172.17.15.97 255.255.255.0 172.17.12.1

  6. request redirection

    # encoding:utf-8 import reimport jsonimport randomfrom esdapi.config import BASE_URLfrom requests.se ...

  7. CRMEB 商城系统常见错误修复办法

    清空了用户表,没有清空拼团记录表导致,解决办法 --v2.5.2 清空拼团表-- TRUNCATE table eb_store_pink 修改了组合数据规则导致的,更新数据即可 --v2.5.2 e ...

  8. javascript 事件冒泡和事件代理

    事件冒泡 简单的讲,当子元素的事件处理函数被触发(如onclick),该事件会从事件源(当前子元素)逐级向上层元素传递,触发祖先元素的 onclik 事件,一直到最外层 html 根元素. 这可能会带 ...

  9. 【2】学习C++之引用

    C++中的引用类似于现实生活中人们之间起昵称,昵称和本名都可以辨别人. 1.普通变量的引用: ;//a为本名 int &b=a;//b为a的昵称 其中不能光有昵称没有本名,如果只定义了引用,却 ...

  10. 【汇编语言】Win10 安装 DOXBox0.74

    1.下载package包,有用的只有前两个. 2.解压 masm 压缩文件,我把它解压到D盘. 3.双击 图1 中的 DOXBox 0.74.exe 进行安装. 4.打开 DOXBox0.74 (参考 ...