题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647

题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... 让你求最小的值,但是中间出现有向环就不行了,输出-1。

拓扑排序队列实现,因为叶子是最小的,所以把边反向就可以求了。

//拓扑队列实现
//就是先把入度为0的先入队,然后每次出队的时候把相邻的点的入度减1,要是入度为0则再入队,不断循环直到队列为空
//时间复杂度为O(N + E)
//这题就是把边反向就好了
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <vector>
using namespace std;
const int MAXN = 1e4 + ;
typedef pair <int , int> P;
vector <int> G[MAXN];
int du[MAXN];
int main()
{
int n , m , u , v;
while(~scanf("%d %d" , &n , &m)) {
for(int i = ; i <= n ; i++) {
G[i].clear();
du[i] = ;
}
for(int i = ; i < m ; i++) {
scanf("%d %d" , &u , &v);
G[v].push_back(u);
du[u]++;
}
queue <P> que;
while(!que.empty()) {
que.pop();
}
int cont = , res = ;
for(int i = ; i <= n ; i++) {
if(!du[i]) {
que.push(P(i , ));
res += ;
cont++;
}
}
while(!que.empty()) {
P temp = que.front();
que.pop();
for(int i = ; i < G[temp.first].size() ; i++) {
du[G[temp.first][i]]--;
if(!du[G[temp.first][i]]) {
que.push(P(G[temp.first][i] , temp.second + ));
res += temp.second + ;
cont++;
}
}
}
if(cont == n) {
cout << res << endl;
}
else {
cout << - << endl;
}
}
}

最新文章

  1. C和指针 第十七章 习题
  2. Objective-C 关键字:retain, assgin, copy, readonly,atomic,nonatomic
  3. Java虚拟机JVM学习03 连接过程:验证、准备、解析
  4. eclipse启动无响应,停留在Loading workbench状态,或老是加载不了revert resources
  5. Mysql 如何删除数据表中的重复数据!
  6. Cent OS 常用 命令
  7. Android完美解决输入框EditText隐藏密码打勾显示密码问题
  8. poj 1458 Common Subsequence_最长公共子串
  9. Java的JXL操作xls形式
  10. freemarker之list遍历(八)
  11. C#中的函数式编程:序言(一)
  12. 在vue中使用echarts图表
  13. C语言基础02
  14. Typescript 学习笔记四:回忆ES5 中的类
  15. swift3.0 存取json数据到沙盒
  16. mybatis 中文做参数报错
  17. DevExpress v17.2新版亮点—Windows 10篇
  18. 前端之JavaScript(一)
  19. POJ 3974 Palindrome 字符串 Manacher算法
  20. MyBatis-Spring 使用总结

热门文章

  1. super.getClass()方法
  2. C#中跨线程读取控件值、设置控件值
  3. BZOJ_1628_[Usaco2007_Demo]_City_skyline_(单调栈)
  4. Nginx - webbench压力测试
  5. VirtualBox的工作原理&amp;参考网上文章
  6. 深入学习Oracle分区表及分区索引
  7. db file scattered read 等待事件
  8. Delphi DecodeDate和EncodeDate 拆分和聚合时间函数的用法
  9. MySQL基础之第11章 插入、更新与删除数据
  10. MyBatis学习 之 三、动态SQL语句