#include<stdio.h>

#include<queue>

#include<vector>

#include<iostream>

using namespace std;

#define  N  11000

int n,m,sum;

int indegree[N],value[N];

vector<int>now[N];

int Max(int a,int b) {

return a>b?a:b;

}

int find() {

       queue<int>q;

  int i,cur,f;

  for(i=1;i<=n;i++)

if(indegree[i]==0) {

value[i]=888;

q.push(i);

}

f=n;

while(!q.empty()) {

cur=q.front();

q.pop();

f--;

for(i=0;i<now[cur].size();i++) {

        value[now[cur][i]]=Max(value[cur]+1,value[now[cur][i]]);

if(--indegree[now[cur][i]]==0)

q.push(now[cur][i]);

}

}

if(f==0)

return 0;

return 1;

}

int main() {

int i,a,b;

while(scanf("%d%d",&n,&m)!=EOF) {

for(i=1;i<=n;i++)

now[i].clear();

memset(indegree,0,sizeof(indegree));

memset(value,0,sizeof(value));

while(m--) {

scanf("%d%d",&a,&b);

    indegree[a]++;

now[b].push_back(a);

}

if(find()) {

printf("-1\n");

continue;

}

sum=0;

for(i=1;i<=n;i++)

sum+=value[i];

printf("%d\n",sum);

}

return 0;

}

hdu 2647拓扑排序 容器的更多相关文章

  1. hdu 2647 (拓扑排序 邻接表建图的模板) Reward

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...

  2. hdu 2647拓扑排序 结构体模拟容器

    #include<stdio.h> #include<queue> #include<iostream> using namespace std; #define ...

  3. HDU 2647 拓扑排序

    题意:每个人的工资至少888,然后有m个条件,前者比后者要多.求最少工资. 分析: 最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了.比较麻烦. 正确方式 ...

  4. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  5. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  6. HDU 4857 逃生 (反向拓扑排序 & 容器实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  7. hdu 1811拓扑排序+并查集(容器实现)

    http://www.cnblogs.com/newpanderking/archive/2012/10/18/2729566.html #include<stdio.h> #includ ...

  8. HDU 5638 拓扑排序+优先队列

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...

  9. 传递 hdu 5961 拓扑排序有无环~

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分 ...

随机推荐

  1. 2017西安网络赛C_SUM

    样例输入 1 1 样例输出 89999999999999999999999999 题意:利用上述公式,求出k的值 思路:找规律,找规律发现233个9,无论x是何值永远成立 (这种规律题尽量就不用跟队友 ...

  2. 【转】MySQL常见的运算符及使用

    转自:http://www.linuxidc.com/Linux/2016-03/129672.htm MySQL中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 算术操作符 ...

  3. C# 调用非托管函数

    C#通过DllImport可以直接调用Windows中的一些功能.C++中已经编写好的一些方法: DllImport所在的名字空间:System.Runtime.InteropServices; Dl ...

  4. JavaScript相关技术学习

    百度前端技术学院 http://ife.baidu.com/task/all 框架 JQuery 简单Web论坛  https://github.com/huanshen/web-bbs http:/ ...

  5. asp.net ajax get post 中文乱码解决办法

    前台: var username = $("#UserName").val(); var tel = $("#tel").val(); var yzm = $( ...

  6. Java多线程——线程之间的协作

    Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...

  7. Integer / BigInteger / BigDecimal 方法

    import java.math.BigDecimal; import java.math.*; public class Main{ public static void main(String[] ...

  8. Font Awesome 图标使用总结

    参考 http://fontawesome.dashgame.com/ 1 大图标递进  fa-lg (33%递增).fa-2x. fa-3x.fa-4x,或者 fa-5x  2 固定宽度  fa-f ...

  9. JavaScript(十一)Dom

    Dom(Document object module) 1.获取dom对象的方法 正常用的方法 推荐 getElementById()//通过id选择唯一的dom getElementsByClass ...

  10. oracle创建临时表空间、用户表空间、创建用户关联表空间、授权等

    1.创建临时表空间 CREATE TEMPORARY TABLESPACE test_temp TEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test ...